使用 Flash 消息重定向到另一个控制器 - Cakephp 3

有没有一种方法可以使用 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 上没有值(非空),我想检查错误是否是由索引方法调用的,如果是,则将用户发送到带有闪存消息的主页(HomeController)。在另一种情况下,只需将用户发送到捕获错误的控制器的索引并显示闪存消息。


上面的代码允许我显示 Flash 或重定向,但我不能同时执行这两个操作。


繁华开满天机
浏览 118回答 1
1回答

蝴蝶不菲

需要在 $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]);        }    }}
打开App,查看更多内容
随时随地看视频慕课网APP