CakePHP有没有像Symfony的偏见?

时间:2011-04-21 18:30:09

标签: cakephp symfony1 elements partials

如果要在视图中重用代码,Symfony有两种基本机制:partials和slots。部分很好,因为您可以定义全局部分(您可以在任何模块中使用它们)和模块部分(它们仅在某个模块中可用)。

但是,在CakePHP中,您只有常规的模板和元素,后者在每个视图中都可用,无论您使用的是哪种模型/控制器。

CakePHP有没有Symfony的部分内容?例如,避免重复模型的表单代码会很好。您可以拥有两个“包含”常用表单的模板(添加和编辑)。

我知道你仍然可以使用元素,但是为模块设置一个“本地”元素目录似乎可以使事情更有条理。你能建议一个解决方法来模拟这个吗?

谢谢!

2 个答案:

答案 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