【发布时间】:2020-12-16 19:04:57
【问题描述】:
有一种方法可以使用 Flash 消息从组件重定向到不同的控制器(不是调用该组件的控制器)吗?比如:
namespace App\Controller\Component;
use Cake\Controller\Component;
class ValidateValueComponent extends Component
{
public function validateValue($var = null){
try{
if(!$var){
throw new \Exception();
}
} catch(\Exception $e){
$action = $this->request->params['action'] === 'index' ? 'home' : $this->request->params['action'];
$controller = $action === 'home' ? 'Home' : $this->request->params['controller'];
$this->_registry->getController()->Flash->error(__('Message!'));
// $this->_registry->getController()->redirect(['controller' => $controller, 'action' => $action]);
}
}
}
我想验证一些值并避免它破坏执行。如果 $var 上没有值(非空),我想检查错误是否由 index 方法调用,如果是,则使用 flash 消息将用户发送到主页(HomeController)。在另一种情况下,只需将用户从捕获错误的控制器发送到索引并显示 Flash 消息。
上面的这段代码允许我显示 Flash 或重定向,但我不能同时做这两个。
不管怎样,
谢谢大家!
【问题讨论】:
-
更正,我没有写任何值(不是空的)我的意思是空的..
-
在重定向中持久保存 Flash 消息需要使用会话,因此请确保您的会话正常工作,即检查会话 cookie 是否正在设置/发送。还要检查您的调试/错误日志以了解有关标头的可能问题。
-
您有一些参考代码或使用示例吗?我会搜索的。
-
您说有时可以显示 Flash 消息,因此您的会话应该没问题。不过,我很惊讶您显示的代码可以完成重定向,因为这通常是通过从控制器操作返回重定向请求来完成的;您没有在此处返回重定向,并且您不在控制器操作中。
-
Ops,忘记了返回......无论如何,既然你已经帮助我了,你知道是否有办法使用带有前缀的 $this->redirect 吗?使用选项数组或类似的东西..谢谢
标签: php exception cakephp components cakephp-3.0