【问题标题】:CakePHP: how to do sub-actions with sub-viewsCakePHP:如何用子视图做子动作
【发布时间】:2013-12-24 10:27:12
【问题描述】:

抱歉,如果我使用错误的术语来描述我正在尝试做的事情...

我有一个名为 Report 的模型/控制器,用户可以像这样查看它:

example.com/reports/view/123

每个报告都有AndBelongsToMany 文件对象。我需要像这样访问这些文件:

example.com/reports/view/123/file/456

或者

example.com/reports/view/123/456
                          ^   ^
                          |   |
                      report  file

我故意不为文件 (example.com/files/view...) 创建单独的操作,因为对文件的访问与报告相关。

在 CakePHP 中执行此操作的正确方法是什么?

我的第一个猜测是在ReportsController::view 中添加逻辑,检查第二个参数(文件)是否存在,并有条件地手动render() 一个不同的视图(文件)。但我不确定这是否是“CakePHP 方式”。

【问题讨论】:

    标签: php cakephp routing cakephp-2.0 subroutine


    【解决方案1】:

    您走在正确的道路上,请修改您的操作以接受可选参数。

    public function view($file = null) {
        $somethingElse = null;
        if (isset($file)) {
            //your logic
            $somethingElse = $this->Foo->bar();
        }
        $this->set(compact('somethingElse'));
    }
    

    关于视图,我不知道您的要求,但我认为您不需要创建不同的视图,您可以在视图中放置条件以显示某些内容,或者(我最喜欢的方法)创建仅当 $somethingElse 包含某些内容时才会显示的元素。那就是:

    //View code
    if (!empty($somethingElse)) {
        echo $this->element('yourAwesomeElement', compact('somethingElse'))
    }
    

    然后在你的AwesomeElement中

    foreach ($somethingElse as $something) {
        echo $something;
    }
    

    好消息是您的元素可以重复用于未来可能需要它的视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-27
      • 1970-01-01
      • 2012-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-28
      • 1970-01-01
      相关资源
      最近更新 更多