使用控制器中的另一个操作处理 post 个操作

Process post action with another action within controller

我有一个设计非常糟糕的应用程序,其中 index 操作在基于 JavaScript 的对话中显示一个表单,提交给 process 操作然后重定向到 index (无论是成功还是错误)。 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() 部分,以便 $this->request->data 不会丢失,我有机会以 index.ctp 中生成的形式再次显示它,但我做错了: $this->requestAction()$this->index() 都尝试渲染 process.ctp。我是在错误地使用它们还是错过了正确的方法?

如果你想运行一个不同的动作,你可以使用Controller::setAction(),它改变了请求中的action参数,相应地设置模板渲染,returns 调用操作的可能 return 值。

public function process()
{
    // ....

    $this->setAction(
        'index',
        $this->request->data['Unicorn']['foo'],
        $this->request->data['Unicorn']['bar']
    );
}

另见