代码之家  ›  专栏  ›  技术社区  ›  Álvaro González

使用控制器内的另一个操作处理后置操作

  •  0
  • Álvaro González  · 技术社区  · 7 年前

    我有一个设计糟糕的应用程序 index action在基于javascript的对话框中显示一个表单,提交给 process 操作,然后重定向到 指数 (无论是成功还是错误)。这个 过程 操作甚至没有视图:

    class UnicornsController
    {
        public function index($foo, $bar)
        {
            $this->set(
                array(
                    'unicorn' => $this->Unicorn->findByFooAndBar($foo, $bar);
                )
            );
        }
    
        public function process()
        {
            $this->Unicorn->save($this->request->data);
            $this->redirect(
                array(
                    'action' => 'index',
                    $this->request->data['Unicorn']['foo'],
                    $this->request->data['Unicorn']['bar'],
                )
            );
        }
    }
    

    我添加了正确的错误报告。我正试图改变 this->redirect() 部分SO $this->request->data 不会丢失,我有机会在中生成的表单中再次显示它 index.ctp 但我做不好 $this->requestAction() $this->index() 尝试渲染 process.ctp 无论如何。我是用错了还是错过了正确的方法?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Álvaro González    7 年前

    如果要运行其他操作,可以使用 Controller::setAction() ,它将更改 action 参数,设置要相应呈现的模板,并返回调用的操作的可能返回值。

    public function process()
    {
        // ....
    
        $this->setAction(
            'index',
            $this->request->data['Unicorn']['foo'],
            $this->request->data['Unicorn']['bar']
        );
    }
    

    另见

    推荐文章