$model->load($post)方法返回false [ 2.0 版本 ]
想做一个输入验证,把自己的数据通过load()方法加载进model时报false,
视图代码:
<form name="Record" action="<?php echo $_SERVER['REQUEST_URI'];?>" method="post">
姓 名:<input name="name" type="text" /><br/>
年 龄:<input name="age" type="text" maxlength="2" ><br/>
模型代码:
控制器代码:
$post = $request->post();
//$post['Record'] = $request->post();
$models = new Record;
var_dump($models->load($post));die;
if ($models->load($post) && $models->validate()) {
$errors = 'valid';
}else{
//$errors = $models->errors;
$errors = 'fail';
}
echo $errors;die;
$post数组格式:
Array
(
[name] => test
[age] => 33
)
按照网上的解决办法,load第二个参数传空的时候,或者把Model类名写入到$post的时候报错如下:
另外,直接在rules方法里加['age','safe'] 依然不行
最佳答案
其他 5 个回答
-
虽然已经结贴了,但是我还是想发表一下:
1问:为什么要load的三种写法:
public $name; public $Age
(PS:其实上面的回答错误,name和age前面少了$)
1答:因为我们Record继承的是Model,yii里 Model 只是模型,没有做数据表映射。(当然前提是你想映射需要数据表有这两个字段,还要继承Model的子类ActiveRecord)
所以在提交表单属性到模型时需要填充模型到属性上。而ActiveRecord已经做了数据表与属性映射,所以如果你继承的是ActiveRecord就不需要定义上面两个public
之所以继承的是model 所以要定义两个属性接收表单属性。2问:load数据如何操作的
2答:一下提供三种写法
//$models->load($post,'')
//$models->load(['Record'=>$post])
//$models->load(['Record'=>$post],'Record')共 1 条回复最爱大裤衩 觉得很赞
最爱大裤衩 上海
注册时间:2018-03-27
最后登录:2019-05-29
在线时长:8小时30分
最后登录:2019-05-29
在线时长:8小时30分
- 粉丝2
- 金钱175
- 威望0
- 积分255