1

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

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

CakePHP 有类似 Symfony 的部分功能吗?例如,避免为模型重复表单代码会很好。您可以有两个“包含”通用表单的模板(添加和编辑)。

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

谢谢!

4

2 回答 2

3

为什么不在控制器特定的视图目录中创建一个视图(module_partial.ctp)。这将使代码特定于您希望它所属的控制器。因此,假设您有一个书籍控制器。您想将 BooksController 特定表单添加到您的某些书籍视图中。

views/books/在名为的目录中创建一个视图:search_partial.ctp

search_partial.ctp包含您想要的 HTML 代码。

然后,在任何视图中,只需调用:

<?php echo $this->render('search_partial'); ?>

这不会阻止其他控制器视图加载它,但它可以保持代码库的可读性和您期望的隔离。

所有全局变量都将进入视图/元素。

于 2011-04-21T20:15:50.493 回答
0

您可以将元素放入插件中。

你可以做类似 $this->element('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

于 2011-04-21T18:39:02.330 回答