我在控制器中有一个动作,我调用一个函数来检查是否设置了cookie,如果没有设置cookie,那么它应该重定向到其他地方。
在同一个控制器中,我对某些变量进行了评估,如果它们没有设置,则抛出一个禁止的异常,但即使没有设置cookie,它也不会重定向,并且会出现禁止的消息
正确的操作应该是重定向的,并且在cookie不存在时或者至少是我需要的时候,永远不会评估变量。
此功能在appController
中public function isCookieSet(){
if(!$this->Cookie->check('cookie')){
return $this->redirect($this->referer());
}
}
我控制器内的代码
public function editarImg($negocio_id=null){
$this->isCookieSet(); //should redirect here
//but executes until here
if((!isset($this->perRol['crear_negocios']) || $this->perRol['crear_negocios']==0) ||
(!isset($this->perRol['cargar_elim_imagenes']) || $this->perRol['cargar_elim_imagenes']==0)){
throw new ForbiddenException($this->getMensajeError(403));
}
...
}
答案 0 :(得分:0)
问题中的代码可以重写(为清楚起见),如下所示:
public function editarImg($negocio_id=null){
if(!$this->Cookie->check('cookie')){
$this->redirect($this->referer());
}
// more code
正在忽略对redirect
的调用的返回值,“更多代码”总是执行。
这不是预期调用方法redirect
的方式,如mentioned in the docs(强调添加):
该方法将返回具有适当标头集的响应实例。 您应该从操作返回响应实例,以防止视图呈现并让调度程序处理实际的重定向。
Cake\Controller\Controller::redirect()
的签名已更改为Controller::redirect(string|array $url, int $status = null)
。第三个参数$ exit已被删除。该方法不再发送响应和退出脚本,而是返回一个具有相应标头集的Response实例。
问题中的代码必须等同于:
public function editarImg($negocio_id=null){
if(!$this->Cookie->check('cookie')){
return $this->redirect($this->referer()); # <- return the response object
}
// more code
答案 1 :(得分:0)
试试这个,它应该有效:
public function isCookieSet(){
if(!$this->Cookie->check('cookie')){
// return $this->redirect($this->referer()); <- not working
$this->response = $this->redirect($this->referer());
$this->response->send();
exit;
}
}