常见误区 - 表单模型不非要用在视图上 ¶
作者:KK
发表日期:2016.9.7
根据官方的权威指南所述,将表单模型传到视图里,再在视图里用ActiveForm
将模型的信息转换成表单输出,使得好多新手以为使用表单模型就一定要使用ActiveForm处理,才能在控制器接收时进行$model->load(...)
其实可以不需要这样,下面实践一下:
登陆表单模型定义:
class LoginForm extends \yii\base\Model{
public $username;
public $password;
public function login(){
print_r([
$this->username,
$this->password,
]);
}
}
控制器接收登陆数据时:
//假设POST数据如下:
$_POST = [
'username' => 'xiaoming',
'password' => '123456',
];
public function actionLogin(){
$model = new \app\models\LoginForm();
$model->load(Yii::$app->request->post(), ''); //第2个参数 '' 是重点!
$model->login(); //会输出用户名和密码
}
其中代码注释里提到load方法的第2个参数要传空是重点,因为不传空的话,那么POST数组必须是这样的结构才可以load进模型:
$_POST = [
'LoginForm' => [ //就是以模型名称为命名在外面包多一层
'username' => 'xiaoming',
'password' => '123456',
],
];
$model->load(Yii::$app->request->post())