验证信息的循环

#1 hygzs

var $verifier = array(
"rules" => array( // 规则
'name' => array( // 这里是对username的验证规则
'notnull' => TRUE, // username不能为空
'minlength' => 5, // username长度不能小于5
'maxlength' => 12, // username长度不能大于12
),
),
"messages" => array( // 提示信息
'name' => array(
'notnull' => "姓名不能为空",
'minlength' => "姓名不能少于5个字符",
'maxlength' => "姓名不能大于20个字符",
'youare' => "看来你不是jake", // 没有出现在规则中的信息提示
),
)
);


function insert(){
        $data=spClass("materialModel");
        $namt=array('name'=>$_POST['name']);
        $list=$data->find($namt);//判断是否重名
        $data->verifier = $data->verifier; // 切换验证规则  
        if( false == $data->spVerifier($this->spArgs()) ){
            $data->create($this->spArgs());
            $this->success("添加成功", spUrl("materialAction","index"));
        }else{
            foreach($data as $item){
                foreach($item as $msg){
                    $this->error($msg,spUrl("materialAction","add"));
                }
            }
        }        
    }

现在可以提示了,请问怎么用foreach来循不输出验证提示?我现在这样写提示的全是Array,循环规则不对,请帮忙指正,谢谢!

2011-09-04 10:49:11

#2 jake

可以先把$data给dump出来
dump($data);
看看内容是什么,然后根据smarty的变量循环来循环出来http://www.speedphp.com/view-template-array.html

2011-09-04 16:29:22

#3 hygzs

我这个不是在模板中输出,是要在控制器中判断验证错误信息

模型代码

 
class materialModel extends spModel{
    public $pk="id";
    public $table="material";
    var $verifier = array(
        "rules" => array( // 规则
            'name' => array(  // 这里是对username的验证规则
                'notnull' => TRUE, // username不能为空
                'minlength' => 5,  // username长度不能小于5
                'maxlength' => 12, // username长度不能大于12
            ),
),
        "messages" => array( // 提示信息
            'name' => array(
                'notnull' => "材料名不能为空",
                'minlength' => "材料名不能少于5个字符",
                'maxlength' => "材料名不能大于12个字符",
            ),
)
    );


控制器代码


function insert(){
        $data=spClass("materialModel");
        $namt=array('name'=>$_POST['name']);
        $list=$data->find($namt);//判断是否重名
        if($list){
            $this->error("该物料已存在", spUrl("materialAction","add"));
        }
        $data->verifier = $data->verifier; // 切换验证规则
        if( false == $data->spVerifier($this->spArgs())){            
            $data->create($this->spArgs());
            $this->success("添加成功", spUrl("materialAction","index"));
        }else{
            foreach($data as $item){  //当物料名为空提示错误
                foreach($item as $msg){
                    $this->error($msg,spUrl("materialAction","add"));
  }
            }
        }
    }



我 dump($data);  出来的就是模型里面的代码。
如果我没写名称就提示 材料名不能为空, 名字过长或过短就提示长或短的信息
请问怎么在控制器中写这个循环呀?

2011-09-04 17:49:48

#4 hygzs

QQ截图未命名.jpg

dump的数据,弹出的Array就是验证的提示

2011-09-04 17:55:51

#5 jake

这里

        if( false == $data->spVerifier($this->spArgs())){            
            $data->create($this->spArgs());
            $this->success("添加成功", spUrl("materialAction","index"));
        }else{
            foreach($data as $item){  //当物料名为空提示错误
                foreach($item as $msg){
                    $this->error($msg,spUrl("materialAction","add"));
  }
            }
    }



改成

$ver = $data->spVerifier($this->spArgs());
if( false == $ver ){
添加成功
}else{
foreach($ver as $msg){
$this->error($msg,spUrl("materialAction","add"));
}

}


spVerifier返回值就是错误提示,如果返回值(上例是$ver)是false,那么就证明没有错。
可以dump($ver);出来看看就知道了。

2011-09-04 18:02:29

#6 hygzs

谢谢老大指点
再加一个foreach就好了

foreach($ver as $msg){
                foreach($msg as $info){
                    $this->error($info,spUrl("materialAction","add"));
                }
            }

2011-09-04 18:41:54

#7 daixingchen0

   var $pk = "s_id";
  var $table = "sang"; // 数据表的名称
  
  
    //验证规则
        var $verifier = array
        (
                "rules" => array(      // 规则
                        's_fenlei' => array('notnull' => true,'minlength' => 6,'maxlength' => 60),
                ),
                "messages"   => array( // 提示信息
                        's_fenlei' => array('notnull' => "分类不能为空!",'minlength' => "分类名必须大于6个字符",'maxlength' => "分类名不能超过60个字符"),
                )
        );

2013-07-24 15:46:37

#8 daixingchen0

请问我这个有错误么。。即使分类不为空 为什么老提示分类不能为空呢 :L 大神告诉下我啊

2013-07-24 15:49:27