如果我使用了错误的术语来描述我试图做的事情,请道歉…
我有一个名为Report的模型/控制器,用户可以这样查看:
example.com/reports/view/123
每个报表都有AndBelongToMany文件对象。我需要让这些文件可以访问,如下所示:
example.com/reports/view/123/file/456
或
example.com/reports/view/123/456
^ ^
| |
report file
我有意不为文件(example.com/files/view...
)创建单独的操作,因为对文件的访问是相对于报告的。
在CakePHP中,正确的方法是什么?
我的第一个猜测是在ReportsController::view
内部添加逻辑,以检查第二个参数(文件)的存在,并有条件地手动render()
一个不同的视图(用于文件)。但我不确定这是否是"CakePHP方式"。
如果路径正确,请修改操作以接受可选参数。
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'))
}
然后在你的真棒元素
foreach ($somethingElse as $something) {
echo $something;
}
好的一面是,您的元素将可用于未来可能需要它的视图。