我正在使用Yii框架,我想通过单击调用控制器中的操作的链接来更新模型,此操作用于修改模型的某些属性,然后如果修改完成,则应该重定向到另一个动作。我的问题是模型更新没有保存,我不知道为什么,这是我的代码:
查看代码:
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>title</th>
<th>category</th>
<th>published</th>
<th>priority</th>
<th>in news banner</th>
<th>publish</th>
</tr>
</thead>
<tbody>
<?php
$x=0;
if(!empty($model)){
foreach ($model as $m){
$x++;
echo "<tr>
<td>$x</td>
<td>$m->title</td>
<td>$m->category</td>
<td>$m->display</td>
<td>$m->priority</td>
<td>$m->newsBanner</td>
<td><a href='".Yii::app()->createUrl('articles/approve', array('id'=>$m->id, 'c'=>$c))."'><button id='btn$m->id'>Publish</button></a></td>
</tr>";
}
}
?>
</tbody></table>
行动代码:
public function actionApprove($id, $c)
{
$artilce = $this->loadModel($id);
if(!empty($artilce)){
$article->category = 'anything';
$article->validate();
print_r($artilce->getErrors());
if($artilce->save())
$this->redirect(array('pending', 'c'=>$c));
}
}
模型规则代码:
public function rules()
{
// NOTE: you should only define rules for those attributes that
// will receive user inputs.
return array(
array('text, category, display, newsBanner, priority, title, visits, previewText, idUser, homepage', 'required'),
array('idUser, homepage', 'numerical', 'integerOnly'=>true),
array('visits', 'numerical'),
array('category, priority', 'length', 'max'=>50),
array('display, newsBanner', 'length', 'max'=>3),
array('date', 'safe'),
array('image', 'file', 'types'=>'jpg, jpeg, JPG, png, PNG, gif, GIF', 'allowEmpty'=>true, 'on'=>'update'),
// The following rule is used by search().
// @todo Please remove those attributes that should not be searched.
array('id, text, category, display, newsBanner, priority, date, title, visits, previewText, image, caption, idUser, homepage', 'safe', 'on'=>'search'),
);
}
我从getErrors()
获得了空数组,那么问题是什么?
答案 0 :(得分:2)
validate()
方法在调用后清除错误(作为默认行为)。如果你看一下官方文件,你会看到:
public boolean validate(array $attributes=NULL, boolean $clearErrors=true)
默认情况下,$ attributes :应验证的属性列表。默认为null,表示应验证适用的验证规则中列出的任何属性。如果此参数作为属性列表给出,则仅验证列出的属性。
$ clearErrors :是否在执行验证之前调用clearErrors
$clearErrors
设置为TRUE
。因此,在调用getErrors()
方法后,validation()
方法中不会出现错误。
尝试:
if($article->validate()){
//then save
}
或:
$article->validate(NULL,FALSE);
//check errors