【发布时间】:2012-08-06 08:46:03
【问题描述】:
我正在与 Yii 合作一个项目。我目前正在后端工作。 我正在控制器中实现一个函数,该函数应该加载模型,更改数据库中的值(从 0 变为 1 的 tinyint),然后重定向到另一个 url。 我想以与使用 CRUD 生成器生成的“删除”函数相同的方式使用此函数。 所以在“删除”功能上启发了自己,我正在尝试将这个用于“接受”功能:
public function actionAccept($id) {
if(Yii::app()->request->isPostRequest)
{
$model = $this->loadModel($id);
$model->testimonial_accepted = '1';
$model->save();
// if AJAX request we should not redirect the browser
if(!isset($_GET['ajax']))
$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
}
else
throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
}
我在视图中调用“接受”函数,如下所示:
array('label'=>'Accept Client', 'url'=>'#', 'linkOptions'=>array('submit'=>array('accept','id'=>$model->id),'confirm'=>'Are you sure you want to accept this item?')),
运行时,没有错误。它加载了正确的模型,但不会更改数据库中的值(testimonial_accepted)。你知道为什么吗?我做错了什么?
提前致谢,
Supialios。
【问题讨论】:
-
检查 $model->save() 函数是否返回 true ,即有任何验证错误。或者作为一种解决方法使用 $model->save(false)
-
请注意,Yii 提供了检查请求是否为 AJAX 请求的功能:
Yii::app()->request->isAjaxRequest。此外,如果您只想使用 POST 方法执行操作,则可以在控制器的filters()方法返回的数组中指定'postOnly + accept'。通过这种方式,您可以进一步简化代码。
标签: php object frameworks model yii