项目的后台更改和添加文章突然无效了,查看系统日志发现是
Module not inserted due to validation error.
其实原因很简单,在表单中加入了百度编辑器,在给编辑器命名的时候使用了name="content",由于yii2 view页面在提交表单后,控制器要使用$model->load()来检查当前类名数组是否存在。
如:
view里的表单元素提交的值都放在Article[]数组中,提交的时候会产生这样的一个数组
array (size=2) '_csrf' => string 'cUI2b280TUciBGctXXAHLUUmdwMaBSsRIzIAORd8HDQYNQ8YB38JLg==' (length=56) 'Article' => array (size=6) 'title' => string '这是一篇测试文章' (length=24) 'add_time' => string '2015-10-15 08:39:43' (length=19) 'author' => string 'qmsu' (length=4) 'type_id' => string '1' (length=1) 'status' => string '0' (length=1) 'content' => string '<p>var_dump($post);</p>' (length=23)
如果在该数组外还存在其他的值,则$model->load()会返回false,从而无法添加或更新数据
eg:在Article数组外还有另外一个数据content,从而无法添加或更新数据
array (size=2) '_csrf' => string 'cUI2b280TUciBGctXXAHLUUmdwMaBSsRIzIAORd8HDQYNQ8YB38JLg==' (length=56) 'Article' => array (size=6) 'title' => string '这是一篇测试文章' (length=24) 'add_time' => string '2015-10-15 08:39:43' (length=19) 'author' => string 'qmsu' (length=4) 'type_id' => string '1' (length=1) 'status' => string '0' (length=1) 'content' => string '<p>var_dump($post);</p>' (length=23)
所以在view页面给表单元素命名时,应该使用如下方式name="Article[content]"
<input type="text" maxlength="255" value="" name="Article[content]" class="form-control" id="article-author">
注意:如果使用yii2自动生成表单则无需担心此问题