如果我使用错误的术语描述我正在尝试做的事情,请道歉......
我有一个名为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方式”。
答案 0 :(得分:0)
您走在正确的道路上,修改您的行动以接受可选参数。
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'))
}
然后在yourAwesomeElement
中foreach ($somethingElse as $something) {
echo $something;
}
好处是你的元素可以重用于将来可能需要它的视图。