如果要在视图中重用代码,Symfony有两种基本机制:partials和slots。部分很好,因为您可以定义全局部分(您可以在任何模块中使用它们)和模块部分(它们仅在某个模块中可用)。
但是,在CakePHP中,您只有常规的模板和元素,后者在每个视图中都可用,无论您使用的是哪种模型/控制器。
CakePHP有没有Symfony的部分内容?例如,避免重复模型的表单代码会很好。您可以拥有两个“包含”常用表单的模板(添加和编辑)。
我知道你仍然可以使用元素,但是为模块设置一个“本地”元素目录似乎可以使事情更有条理。你能建议一个解决方法来模拟这个吗?
谢谢!
答案 0 :(得分:3)
为什么不在控制器特定的视图目录中创建视图(module_partial.ctp)。这将使代码特定于您希望它所属的控制器。所以,假设你有一个书籍控制器。您想要将BooksController特定表单添加到您的某些书籍视图中。
在名为views/books/
search_partial.ctp
目录中创建一个视图
search_partial.ctp
将包含您想要的HTML代码。
然后,在任何视图中,只需致电:
<?php echo $this->render('search_partial'); ?>
这不会阻止其他控制器视图加载它,但它会保持代码库的可读性和隔离效果。
所有全局变量都将进入视图/元素。
答案 1 :(得分:0)
您可以将元素放入插件中。
您可以执行类似$ this-&gt;元素('something')的操作;在布局中,并将元素放在插件和/或主应用程序视图文件夹中,如...
App/plugins/a_plugin/views/elements/something.ctp //only called when a controller from 'a_plugin' is called.
App/views/elements/something.ctp // called if the current plugin does not have 'something.ctp' in the elements folder
如果不复制添加/编辑等视图,请查看此https://github.com/infinitas/infinitas/blob/beta/app_controller.php#L389