2018-03-27 12:32:35 4305次浏览 6条回答 0 悬赏 10 金钱

想做一个输入验证,把自己的数据通过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/>

模型代码:
m.png

控制器代码:

$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的时候报错如下:
空.png

另外,直接在rules方法里加['age','safe'] 依然不行

最佳答案

  • 师阳 发布于 2018-03-27 20:49 举报

    看这报错,模型代码不应该这样写吗:

    class Record extends Model {
        // 就加这两句:
        public name; 
        public age;
    
        public function rules() {
            return [
                [['name', 'age'], 'required']
            ];
        }
    }
    
    2 条回复
    回复于 2018-03-27 21:05 回复

    而且, 这里,应该改为 ,及后面age的。或者改一下控制器的代码

    回复于 2018-03-27 21:48 回复

    确实是因为没有定义这两个字段的问题,不过你说的改一下控制器代码什么意思呢

  • 回答于 2018-03-27 13:39 举报

    load 还有第二个参数,注意看文档

    1 条回复
    回复于 2018-03-27 14:03 回复

    load第二个参数传空值或者传入表单名的时候报错,$model->load($post,''); $model->load($post,'formname');

  • 回答于 2018-03-27 14:27 举报

    不要直接继承Model 除非你知道如何实现里面的方法

  • 回答于 2018-03-27 15:39 举报

    传入空和不传值有区别的吧,看你的空是空字符串null有本质区别。

  • 回答于 2018-03-27 19:47 举报

    load()姿势不对,这样load()第二个参数为''不为null

  • 回答于 2018-03-28 09:38 举报

    虽然已经结贴了,但是我还是想发表一下:
    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-29 15:02 回复
       首先谢谢你的回答。
       关于你说上面采纳的答案是错误的,少了$符号,这个我写的时候是意识到了,不过我认为这是他回答的时候手滑写的而已,不算大问题,毕竟思路是对的,确实是因为没有定义需要验证的字段为成员属性,这个问题已经困扰我一天了,终于找到正确答案了,所以就没有那么苛刻,不过看你的回答更能让我理解了,让我知道了为什么需要对验证的字段作定义了。
       再次感谢你的热心回答
    
    觉得很赞
您需要登录后才可以回答。登录 | 立即注册
最爱大裤衩
见习主管

最爱大裤衩 上海

注册时间:2018-03-27
最后登录:2019-05-29
在线时长:8小时30分
  • 粉丝2
  • 金钱175
  • 威望0
  • 积分255

热门问题