为CButtonColumn按钮设置returnURL

时间:2011-03-15 13:29:08

标签: yii cbuttoncolumn

我正在查看控制器以获取CButtonColumn类中的默认“删除”按钮。它设法在删除CGridView行后返回到上一个网页,并保留在CGridView的同一页面上,而不是转到第一页。相关控制器中负责此操作的行似乎是:

if (!isset($_GET['ajax'])) $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));

我想创建一个具有此行为的新自定义按钮(即返回到上一个视图而不将页面重置为第1页),但只是在按钮的相关操作中包含上面的代码行并不能解决问题。我想我需要以某种方式发送'returnUrl'参数,但我无法弄清楚如何:)

2 个答案:

答案 0 :(得分:1)

您正在查看的'returnUrl'代码使用POST变量作为returnUrl。要使用它,您需要以某种方式POST。在View上调用此代码我假设表单中有<input name="returnUrl">字段。您应该确保此字段(填充了正确的URL值)在您要发布的所有视图上,以便在Controller操作中访问该POST变量。

如果您通过AJAX发布到deleteAction,我认为您可以使用jQuery AJAX函数设置$_POST['returnUrl']变量。

另一种方法可能是使用CWebUser's returnUrl SESSION变量而不是此POST变量。我从来没有这样做过,但它是内置于Yii所以我认为它可以正常工作。

我从来没有真正喜欢Gii生成的hacky $_POST['returnUrl']

你可以做的另一件事是查看$_SERVER['HTTP_REFERER']变量,并将其用于deleteAction中的返回重定向。我不知道是否会设置正确,但是由于Yii所做的302重定向/重写的复杂性。

祝你好运!

答案 1 :(得分:1)

您可以通过CHtml :: link调用设置返回网址。以下是使用删除

的示例
CHtml::link(
    'Delete',
    '#',
     array('submit'=>array('delete','id'=>$model->id),
           'params'=>('returnUrl'=>'controller/action...'), 
           'confirm' => 'Are you sure?'
     )
);

this Stackoverflow回答。