guzuomuse 2012-06-15 18:56:52 5519次浏览 6条回复 0 0 0

请问如何在控制器里传递参数到模型中?谢谢

应该说是如何传递参数到rules规则里某条验证规则的函数中……即:

function rules(){
  return array(
    array('clomum1','function_1'),
  );
}
public function function_1($attribute,$params){

  //即在这里,如何能得到控制器中传递过来的参数,谢谢……
}

之所以想把参数传递到rules中的函数,因为我发现,validate()方法是通过createValidators()方法,获取rules里面的信息,然后进行验证,所以,如果不把参数传递到这个rules里的函数很简单,但是根本起不到对信息验证的功能了,即save()之前validate()方法虽然生效,但根本不会对非rules里的方法进行验证…………求解啊

  • 回复于 2012-06-16 17:43 举报

    传到rules的数组项里就行。

  • 回复于 2012-06-16 18:03 举报

    如何传递呢?能否简单写一下代码呢?谢谢小龙同学

  • 回复于 2012-06-17 16:45 举报

    不用这么麻烦吧,你直接把要验证的字段,验证规则放在rules里就可以了,会自动验证的
    详看save()方法

  • 回复于 2012-06-17 20:04 举报

    呵呵,save()之前会自动调用validate()方法,这个我知道,但是如果有这么一种情况呢?

    这种验证需要在post表单提交之后进行验证,比如文件大小,mime类型等一些需要在服务器端验证的,那肯定要写在Controller里吧?

    那么如果验证不能通过,你肯定要返回通不过的信息吧?如果想利用CActiveForm默认的错误信息处理,而错误信息的处理方式CActiveForm的处理方式是检索Rules里面的验证规则吧?而Rules里面可以写一个字段利用函数来验证吧?那么此函数需要获取Controller返回的错误信息吧?

    对不?那么你是否需要,从Controller里面传递值给模型呢?对吧?

    如果我逻辑上有不对的地方,还请指教,谢谢大家

  • 回复于 2012-06-18 09:06 举报

    save()方法有两个参数,第1个是true or false 是否来验证rules,第二个是要验证的字段和值,数组形式,默认为空,为空的时候验证的是所有数据里中的字段,如果你想验证非数据表中的字段,可以在这里试一下,错误信息直接在'message'=>'错误信息'即可

  • 回复于 2012-06-18 09:38 举报

    呵呵,我说的这个传递参数就是传递message的错误信息。message错误信息,总不能先写在rules里面吧?因为不同的错误,对应不同的错误信息。

    所以我想把这个传递过来啊。。。。。。。

    我现在的办法是在Model中定义一个public 属性,然后在控制器中根据错误信息不同,改变public属性的值,然后rules里面的验证函数调用Model里的这个public属性,输出不同的信息。这样可以实现。但总感觉有点繁琐,应该还有更好的办法……因为控制器中改变Model层的public属性值是通过在Model层里面定义了一个函数来实现的,加上rules里面的那个需要验证的函数,就两个函数了,所以感觉繁琐。

    rules里面的需要验证的函数的形式难道必须是 function fun_name($attribute,$message){} 这样的形式么?总感觉可以在控制器controller中直接传递参数到这个函数中,但一直无法实现……

您需要登录后才可以回复。登录 | 立即注册