关于表单的提交和获取

blog例子中:

当显示一个post详情内容的时候,调用的是post/show,show方法所对应的View主要包括了三部分:一是该post的详细内容、二是对该post的评论列表、三是对该post发表评论的一个表单。这个表单是从comment的view下加载过来的。

主要疑惑是表单的提交。

submitButton:




<?php echo CHtml::submitButton($update?'save':'Submit',array('name'=>'submitComment'));?>

以上这段是没有指定一个submit,像这样array(‘name’=>‘submitComment’,‘submit’=>‘update’),表示该表单是提交给当前模型中的update方法,也就是post/update。如果没有指定就是提交给当前模型的当前方法,也就是post/show,不管是‘修改’还是‘新建’,都是提交给当前模型的当前方法,这样理解对吗?

假如我想把创建评论提交给comment的一个create方法,我是这样写的array(‘name’=>'submitComment,‘submit’=>‘comment/create’),会报错说:comment方法未定义或未找到。是不是,submit只能指向一个‘方法’的名字?如果要提交给comment的create方法,应该怎么写?

另外,假如表单提交给了post/show方法,该方法中判断表单的提交有这么几句:


if(isset($_POST[Comment])){....}

这一句中的Comment是指的什么,是模型的类名吗?比如一个模型叫AAA,在AAAController中获取表单应该时应该写$_POST[AAA]吗??


if(isset($_POST[submitComment])){....}

这一句中的submitComment(name属性)是判断表单是否提交的对吧。

这两句是有区别的,那么区别是什么呢?不可以用第二个代替第一个吗??

请指教新手!谢谢

有人么?

submit选项的值会经过CHtml::normalizeUrl处理。所以你这里应该是’submit’=>array(‘comment/create’)。另外,如果你的comment表单是单独的,那么最好直接在form action里指定要提交的URL,而不是通过设置submitButton的submit选项。

如果你提交的是一个model表单,那么可以用$_POST[‘ClassName’]判断该model的数据是否被提交了。你print_r($_POST)就知道怎么回事了。

搞了半天,发现是模型的类名首字母没有大写