Здравствуйте.
Пример:
signupForm.php в Models:
class SignupForm extends Model {
public $username;
public $email;
public $password;
public $password_repeat;
public $agree_rules = true;
public function rules()
{
return [
['username', 'trim'],
...
];
}
public function signup()
{
if (!$this->validate()) {
return null;
}
$user = new User();
$user->username = $this->username;
$user->email = $this->email;
$user->setPassword($this->password);
$user->generateAuthKey();
return $user->save() ? $user : null;
}
}
actionSugnup в контроллере SiteController:
public function actionSignup()
{
$model = new SignupForm();
if ($model->load(Yii::$app->request->post())) {
if ($user = $model->signup()) {
if (Yii::$app->getUser()->login($user)) {
return $this->goHome();
}
}
}
return $this->render('signup', [
'model' => $model,
]);
}
файл signup.php в views/site:
<?php
<?php $form = ActiveForm::begin(['id' => 'form-signup']); ?>
<?= $form->field($model, 'email')->textInput(['autofocus' => false, 'class' => 'auth-input', 'placeholder' => ' EMAIL'])->label(false) ?>
<?= $form->field($model, 'password')->passwordInput(['class' => 'auth-input', 'placeholder' => ' Пароль'])->label(false) ?>
<?= $form->field($model, 'password_repeat')->passwordInput(['class' => 'auth-input', 'placeholder' => ' Повторите пароль'])->label(false) ?>
<?= $form->field($model, 'agree_rules')->checkbox(['template' => '{input} {label}'])->label('Я принимаю условия <a href="#">пользовательского соглашения</a>') ?>
<?= Html::submitButton('Регистрация', ['class' => 'auth-button', 'name' => 'signup-button']) ?>
<?php ActiveForm::end(); ?>
В экшне создается экземпляр класса модели и передается в представление, тут вроде понятно. Если я правильно понимаю, то по нажатии на кнопку "Регистрация" вызывается метод signup() для экземпляра класса модели, переданного из экшна в представление. Вопрос: где обозначена эта связь, что по нажатии на кнопку формы должен вызваться именно этот метод? Это как-то связано с названием метода которое совпадает с названием класса до суффикса "Form" или как? Заранее спасибо.