使用控制器内的其他动作处理后置动作

时间:2018-07-18 06:47:20

标签: cakephp cakephp-2.5

我有一个经过精心设计的应用程序,其中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。我是不正确地使用它们还是缺少正确的方法?

1 个答案:

答案 0 :(得分:1)

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

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

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

另请参见