Working with forms ================== The primary way of using forms in Yii is through [[yii\widgets\ActiveForm]]. This approach should be preferred when the form is based upon a model. Additionally, there are some useful methods in [[\yii\helpers\Html]] that are typically used for adding buttons and help text to any form. When creating model-based forms, the first step is to define the model itself. The model can be either based upon the Active Record class, or the more generic Model class. For this login example, a generic model will be used: ```php use yii\base\Model; class LoginForm extends Model { public $username; public $password; /** * @return array the validation rules. */ public function rules() { return [ // username and password are both required ['username, password', 'required'], // password is validated by validatePassword() ['password', 'validatePassword'], ]; } /** * Validates the password. * This method serves as the inline validation for password. */ public function validatePassword() { $user = User::findByUsername($this->username); if (!$user || !$user->validatePassword($this->password)) { $this->addError('password', 'Incorrect username or password.'); } } /** * Logs in a user using the provided username and password. * @return boolean whether the user is logged in successfully */ public function login() { if ($this->validate()) { $user = User::findByUsername($this->username); return true; } else { return false; } } } ``` The controller will pass an instance of that model to the view, wherein the Active Form widget is used: ```php use yii\helpers\Html; use yii\widgets\ActiveForm; 'login-form', 'options' => ['class' => 'form-horizontal'], ]) ?> = $form->field($model, 'username') ?> = $form->field($model, 'password')->passwordInput() ?>