Php 在哪里以Cakely的方式放置一些视图代码

Php 在哪里以Cakely的方式放置一些视图代码,php,cakephp,Php,Cakephp,大家好,谢谢回答 如果我想从视图中删除一些代码以简化它,正确的方法是什么 我在Elements/model/some_code.ctp中创建了一个元素,并从view.ctp调用它,但我的同事建议我在view/Controller/some_code.php中创建一个文件,并在view.ctp文件中使用include调用它。 我创建的元素没有复制到应用程序的其他部分,我只在这里移动代码以简化view.ctp文件的可读性 对吗 谢谢大家;) 更好地解释: //index.ctp [..some co

大家好,谢谢回答

如果我想从视图中删除一些代码以简化它,正确的方法是什么

我在Elements/model/some_code.ctp中创建了一个元素,并从view.ctp调用它,但我的同事建议我在view/Controller/some_code.php中创建一个文件,并在view.ctp文件中使用include调用它。 我创建的元素没有复制到应用程序的其他部分,我只在这里移动代码以简化view.ctp文件的可读性

对吗

谢谢大家;)

更好地解释:

//index.ctp
[..some code..]
echo $this->element('box');
[..some code..]

//Element/box.ctp
<?php if (isset($n)) { ?>
<div class="row">
<?php
    echo $this->BoxStat->drawBox('Title', $n[1], 'green', array(
        array('name' => 'Tot', 'link' => "/model/action", 'color' => '', 'number' => $n[2]),
        array('name' => 'Free', 'link' => "/model/action", 'color' => 'green', 'number' => $n[3]),
        array('name' => 'Full', 'link' => "/model/action", 'color' => 'grey', 'number' => $n[4]),
    ));

    [..repeat..]
?>
</div>
<?php } ?>
//index.ctp
[…一些代码]
echo$this->element('box');
[…一些代码]
//Element/box.ctp

我认为,实现这一点的最佳方法是使用元素,原因有很多:

  • 可以轻松地缓存元素
  • 通过使用元素,可以选择要发送的变量或覆盖当前视图变量的值
  • 元素并不像include()或require()在视图中那样共享变量作用域

对视图代码块使用元素是完全正常的;使用include并将php文件放在视图文件夹中-不是。你没有弄清楚元素中有什么,如果它不是模板代码,它应该是一个助手。你的同事的建议打破了MVC模式。偶尔你可能会遇到一些奇怪的问题,从MVC中断是最好的答案,但我怀疑这是其中之一。将复杂的视图分解为多个元素,即使它们只使用一次,也是一种提高可读性的完美方法。但这实际上取决于你到底在做什么来找出最好的解决方案。