【问题标题】:How to make CakePHP redirect to a different action/controller?如何使 CakePHP 重定向到不同的动作/控制器?
【发布时间】:2009-12-09 04:33:52
【问题描述】:

我的情况:

向用户呈现一个表格或项目列表。在每个项目旁边,他们可以单击一个复选框来选择它,然后在底部是一个选择框,上面写着“With selected items...”,以及“delete”、“move to project”、“download”等内容.你知道交易-批量操作。一些操作会立即执行并且不需要他们自己的视图,但是其他操作需要一个中间视图(例如:“将这些移动到哪个项目?”)。

由于每个单独的操作都由不同的操作(可能还有不同的控制器)处理,但表单只能发布到一个地址,我需要一个操作来获取发布的数据并将其发送到适当的位置。

使用redirect() 也不起作用,因为这需要在不久的将来进行 AJAX。

基本上,我只想要一个将委托给不同控制器/操作的操作,就好像那是原始请求一样:维护发布数据、呈现该视图等。

有什么想法吗?

【问题讨论】:

    标签: php model-view-controller cakephp


    【解决方案1】:

    我能够使用 Dispatcher 解决这个问题。

    // for example, to reroute to users/delete
    
    // this is in the controller which receives the request.
    // this could even be in the AppController
    
    $this->autoRender = false;
    $d = new Dispatcher();
    $d->dispatch(
        array("controller" => "users", "action" => "delete"),
        array("data" => $this->data)
    );
    

    【讨论】:

      【解决方案2】:

      如果您遵循 MVC 设计模式,那么您不会有任何问题,因为业务逻辑应该在模型中,而不是在控制器操作中。

      无论如何,您可以创建一个“批量”操作,它会调用所有其他人搜索一些数据以使用。

      【讨论】:

      • 是的 - 我该怎么做?如何在不同的控制器上调用不同的操作?
      • "call" 并不是很推荐。但是您可以在第一个控制器中实例化所需的控制器。尽管如此,最好的选择是让模型来完成这项工作,并拥有一个控制器操作 bulk(),例如。当您移植到 ajax 时,事情会更容易处理,顺便说一句
      猜你喜欢
      • 1970-01-01
      • 2012-07-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多