为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
繁华开满天机 2023-11-05 15:55:33
有没有一种方法可以使用 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 或重定向,但我不能同时执行这两个操作。
查看完整描述

1 回答

?
蝴蝶不菲

TA贡献1810条经验 获得超4个赞

需要在 $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]);

        }

    }

}


查看完整回答
反对 回复 2023-11-05
  • 1 回答
  • 0 关注
  • 117 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信