【问题标题】:Proper Code-separation in Zend Framework 2Zend Framework 2 中的正确代码分离
【发布时间】: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-&gt;form()-&gt;stuff() . '&lt;br/&gt;'; 以将它们从一行中删除。这样他们就不会那么眼痛了。

标签: php jquery zend-framework zend-framework2 code-separation


【解决方案1】:

在您的视图层中使用局部视图绝对没有错。视图不仅仅是文本。它也有脚本元素。虽然是的,但您可以在 Zend 框架之上使用(其他)模板语言(如 smarty),但这有点不必要,因为 PHP 本身就是一种模板语言(P...超文本处理器)。

上面的例子使用 FORMS 作为一个坏例子。现在我挑战你向我展示任何可以很好地处理表单的框架/语言。表单,不管是什么语言,不管框架总是一团糟,因为它们总是包含 MVC 的几个层。表单不仅仅是视图,因此您无法将其完全分开。

$this-&gt;formXY() 实际上只是一个 ViewHelper,所以从技术角度来看,这就是 ViewLayer。

我唯一同意的是 JavaScript 处理。但话又说回来,您可以选择自己包含一个 JavaScript 文件。或者你可以只为你的所有页面创建一个大的 javascript 文件。这 - 再一次 - 不是只有 ZF 才有的问题 ;)

【讨论】:

  • 我完全同意你的观点,并且 不同意 op 的 cmets 是“可憎的” - 恰好视图完全由视图助手/视图部分组成- 两者都是为了避免视图中出现重复和复杂的逻辑而设计的 - 如果使用得当,它们会促进可重用性。
  • 呃..我觉得也许没有好的答案。在此之前,我编写 FORMS 的方式是:[form in HTML file a la View],它 POST 到 [PHP Controller 文件接受表单数据,进行处理和数据库 I/O],重定向到 [View 文件/层]。 HTML 表单基本上是一个带有 HTML+CSS+JavaScript 的视图,与 PHP 变量和循环很好地分离。 Controller 是 PHP 代码和 Database 层交互,View 和 HTML Form 有相同的技术。
  • @AlexP:我认为我对代码的困扰是echo '&lt;br/&gt;';jQuery 块和little bits of HTML inside an otherwisely-PHP code。使用犬类术语,对我来说它读起来就像一只笨蛋。我想如果我真的继续并开始清理它,一旦我了解更多 ZF2 构造,我希望代码具有更多的血统外观。 cleaner code look 是我想去的地方。
  • @Dennis 问题是,那里使用的所有东西最终都是一个 ViewHelper。从某种意义上说,ViewHelper 属于 VIEW 本身。它除了输出 HTML 什么都不做,所以它没有错。确实存在javascript问题,而且我个人还没有找到我真正喜欢的解决方案:P
  • 接受挑战。我知道他被困在 ZF2 中,而且那个 sux。但是 CI 中的表单超级简单,不凌乱,并且除了“基本”MVC 之外不采用“几个”层。您只需在 HTML 的“视图”中编写您的 HTML。然后使用 attr 或 jQuery 方法将其连接到 Controller 就完成了。至于注入检查和验证,您有正常的 jQuery/JS 选项,以及 CI 很好的“输入过滤器”,当在配置中设置时,它使用一个命令来拉取 Get/Post,并执行“注入”检查。它很简单,不凌乱,最重要的是,很容易。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多