常见误区 - 表单模型不非要用在视图上

  • 作者: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())