【问题标题】:Redirect to another controller with a Flash message - Cakephp 3使用 Flash 消息重定向到另一个控制器 - Cakephp 3
【发布时间】: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


【解决方案1】:

实际上,我使用来自bookstack.cn 的链接解决了问题,但是我需要在我的 $components 数组上调用 Flash 组件,然后正常使用它,而与调用该组件的控制器无关。比如:

namespace App\Controller\Component;

use Cake\Controller\Component;

class ValidateValueComponent extends Component
{
    public $components = ['Flash'];

    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->Flash->set(__('Message!'));
            return $this->_registry->getController()->redirect(['controller' => $controller, 'action' => $action]);
        }
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多