1

我在 cake 中的一个视图文件变得很长,已经有 300 多行了。而且我发现很难跟踪理解。

将它们拆分为较小的文件然后将它们包含在父视图文件中是个好主意吗?

如果可以完成,

  1. 我应该在什么扩展名中创建较小的文件?.ctp 还是 .php?
  2. 将它们包含在 require_once(view-child1.ext) 中应该没问题,对吧?

我对 cakePHP 相当陌生。所以我更喜欢这里的专家的建议。请让我朝着正确的方向前进。

编辑

谢谢你们的帮助。

我尝试过这个。但我似乎无法传递变量。echo $this->Element('reviews/view-goal',$history); 父视图显示该元素中的未定义变量并显示错误。

我从这个循环中调用元素:

foreach($histories as $date => $history)

无法通过$历史。但是 $hisories 正在正确传递。

4

2 回答 2

1

是的,这是一个非常好的主意。但是不要使用普通require()的PHP。

CakePHP 有一个称为“元素”的特性,这是一种将视图的一部分放入单独.ctp文件的机制。这些文件放在一个特殊的文件夹中,View/Elements

您可以包含这样的元素:

echo $this->element('sidebar/recent_comments');

如果您需要元素内的任何变量,则需要将它们传递到一个额外的数组参数中:

echo $this->element('sidebar/recent_comments', array('variable_name' => /* Variable content */));

为了使您的视图文件保持较小,您还应该确保将大多数页面(页眉、页脚)共享的内容放入布局文件中。显然:将 JS 和 CSS 保存在外部文件中。

于 2012-08-19T16:25:38.973 回答
1

您应该在带有扩展名的View/Elements文件夹中创建元素。.ctp

此链接将帮助您将视图文件与相关/重复的代码完全分离。

元素基本上是一个迷你视图,可以包含在其他视图、布局甚至其他元素中。元素可用于使视图更具可读性,将重复元素的渲染放置在其自己的文件中。它们还可以帮助您在应用程序中重用内容片段。

元素位于 /app/View/Elements/ 文件夹中,并具有 .ctp 文件扩展名。它们是使用视图的元素方法输出的:

<?php echo $this->element('helpbox'); //without extension ?>

您可以将变量从视图传递给元素。

在您看来:

 <?php echo $this->Element('reviews/view-goal', array('history' => $history));

在 view-goal.ctp 元素中,您可以直接访问$history变量。

于 2012-08-19T16:27:22.840 回答