@tiqq

Yii2 — Где обозначена связь между формами в представлениях и конкретными методами?

Здравствуйте.
Пример:
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" или как? Заранее спасибо.
  • Вопрос задан
  • 48 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы