【发布时间】:2013-11-07 22:31:48
【问题描述】:
我正在编辑 Zend Framework 2 模块,遇到以下代码:
<?php
echo $this->partial('/menu', array('menu' => $this->menu));
?>
<hr />
<div class="myclass">
<h2>Heading</h2>
<?php
$form = $this->form;
$form->setAttribute('action', $this->url('register'));
$form->prepare();
echo $this->form()->openTag($form);
echo $this->formRow($form->get('name'));
echo '<br />';
echo $this->form()->closeTag();
$this->inlineScript()->offsetSetScript(99, "
function checkFieldMatch() {
var field = $('#txtNewField').val();
//...
}
");
?>
</div>
其中大部分是现有代码,现在我添加了一些 jQuery。代码有 HTML、CSS、JavaScript/jQuery 和 PHP。代码位于我的/vendor/$module/$submodule/view/$submodule/register/index.phtml 文件中。
在印象中 Zend Framework 2 是 PHP 世界中最新和最伟大的重量级框架,我不禁想知道在代码分离原则方面到底发生了什么。当然,上述代码的这种可恶之处一定是用户错误。包括我在内的代码作者帮助在一个文件中创建了这种令人难以忍受的混乱技术。我想这表明,无论一个复杂的框架多么善意,当涉及到松散耦合组件时,仍然有人可以将 5 种技术放入一个简短的文件中,让它看起来像地狱一样。
虽然可能有几种方法可以做到这一点,但我的问题是:
在 Zend Framework 2 中分离 HTML、CSS、jQuery、JavaScript、PHP 代码的正确(推荐、设计)方法是什么,以便在可能的情况下将每种技术分离到自己单独的文件和文件夹中,同时保持适当的良好状态- 定义工作连接(松散耦合),并且仅在绝对需要或通过行业最佳实践推荐的情况下将技术直接嵌入彼此?
【问题讨论】:
-
我不得不说,对于一个自 1990 年以来一直从事个人写作并从事专业工作约 6 年的人来说,这种布局看起来很糟糕。我喜欢将所有内容都保留在 MVC 样式布局中,特别强调 V(view) 就是这样,一个视图。没有代码,没有计算,没有脚本,只是一个视图,将输入的变量放在它们所属的位置,从而将最终结果呈现给用户。就个人而言,我不会称 Zend2 为“最新和最伟大的”。这些年来,我尝试了许多其他方法,但我不断回到 Codeigniter。它在环境和布局上都很好而且“免费”。
-
如果你想要“松耦合”和出色的布局,你真的应该尝试 CI。只需将几个文件夹添加到基本目录即可。像“js”、“images”、“style”或“css”等文件夹。然后你可以制作“helper”控制器,扩展“base_url()”来制作像“js_url()”这样的命令,立即调用你js 文件夹并使用参数来获取文件,或者(“subdir/file”)可能是。见这篇博文 -> ellislab.com/forums/membe%20r/140380/viewthread/236299
-
谢谢。这是为了工作,我们决定走 ZF2 路线。一般来说,我是框架的新手,听说过 CI,但从未真正检查过。恐怕现在不是这样做的时候。但将来我想看看 Laravel 4,也可能会看看 CI。
-
我在想:partials 在我看来有点乱。不确定这是否是在这里使用它们的最佳方式,但继续前进......也许对于 jQuery 而不是在这里使用实际的 jQuery 代码我可以创建一个 viewHelper 来说 $this->getjQuery("myCheckFieldMatch") 方法从其他地方拉出实际的 jQuery 字符串。这样做会将 jQuery 移出该文件。说到表单,我并没有为使用 PHP 生成 HTML 而疯狂。我一直在使用 HTML 来做 HTML。也许这是使用框架的必要弊端之一。
-
至于 HTML 换行符,我可以将它们附加到上面的行中,例如
echo $this->form()->stuff() . '<br/>';以将它们从一行中删除。这样他们就不会那么眼痛了。
标签: php jquery zend-framework zend-framework2 code-separation