在我的CakePHP 3应用程序中,在控制器重定向后,我收到此错误:
Error: [LogicException] Controller action can only return an instance of Response
Request URL: /mycontroller/
Stack Trace:
#0 /var/www/vhosts/example.com/httpdocs/vendor/cakephp/cakephp/src/Routing/Dispatcher.php(87): Cake\Routing\Dispatcher->_invoke(Object(App\Controller\SigninsController))
#1 /var/www/vhosts/example.com/httpdocs/webroot/index.php(37): Cake\Routing\Dispatcher->dispatch(Object(Cake\Network\Request), Object(Cake\Network\Response))
#2 {main}
关于CakePHP 2 controller documentation重定向是这样的:
$this->redirect('/orders/thanks');
$this->redirect('http://www.example.com');
return $this->redirect(
array('controller' => 'orders', 'action' => 'confirm')
);
但在CakePHP 3 documentation中似乎是这样的:
return $this->redirect('/orders/thanks');
return $this->redirect('http://www.example.com');
return $this->redirect(
['controller' => 'Orders', 'action' => 'thanks']
);
当我在return
之前添加$this->redirect
字时,错误就会解决。这会产生问题吗?因为我在cakephp 3 migration guide中看不到返回重定向部分。迁移指南仅提及删除了第三个参数。
答案 0 :(得分:3)
返回CakePHP 3应用程序用于您想要重定向到其他页面,或者我们可以说其他控制器的操作/方法,或者即使您想要重定向到您指定的第三方链接: -
return $this->redirect('/orders/thanks');
return $this->redirect('http://www.example.com');
return $this->redirect(['controller' => 'Orders', 'action' => 'thanks']);
如果你想在同一个控制器中重定向到其他方法,那么你可以保留返回并使用如下的setAction,但这里的URL将保持不变。
$this->setAction('thanks');
如果您使用以下代码,则返回是更好的方法,网址将重定向。
return $this->redirect(['action' => 'thanks']);
答案 1 :(得分:0)
答案 2 :(得分:0)
如果您使用路线名称,请使用此 -
$this->redirect(['_name' => 'view-details']);
您正在使用路线然后使用此 -
$this->redirect('/page/view-details');
最后一个选项就是这个
$this->redirect(['controller' => 'Pages', 'action' => 'view']);
----------------------------------------------------------------------
如果您在视图文件中使用路由名称,则使用 -
use Cake\Routing\Router;
echo Router::url(['_name' => 'view-details']);
echo Router::url(['controller' => 'Articles', 'action' => 'view', 'id' => 15]);
答案 3 :(得分:0)
在cakephp中,3.6转到特定视图/页面使用$ this-> render('filename');
如下所示
公共功能搜索() {
$this->render();
$this->render('profile');
}
答案 4 :(得分:0)
您需要关闭自动渲染
因为cakephp默认情况下希望以重定向到CTP文件结尾
使用$this->autoRender = false
内部功能