php – CodeIgniter视图中应该有多少代码?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了php – CodeIgniter视图中应该有多少代码?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4565字,纯文字阅读大概需要7分钟。
内容图文
![php – CodeIgniter视图中应该有多少代码?](/upload/InfoBanner/zyjiaocheng/702/cc9b758d2c624759b2d70946735a7199.jpg)
完成第一步,编写一些页面.在查看结果后,我得到了一个问题……模板中应该有多少代码(View)?
例如,这是一个模板文件:
<?php $this->load->view('header'); ?>
<?php $this->load->view('banner'); ?>
<div id="items">
<?php
for($i=0; $i<count($main); $i++) {
echo '<div class="item">
<div class="name">'.$main[$i]['name'].'</div>';
if($main[$i]['icq']=='') { }
else { echo '<div class="phone">'.$main[$i]['phone'].'</div>'; }
echo '</div>';
}
?>
</div>
<?php $this->load->view('footer'); ?>
您认为此模板中的代码太多或者这是正常的吗?
解决方法:
第一个答案实际上是现场,但用户删除了它(可能是由于同伴的压力).基本上,您不需要模板中的任何逻辑.在理想的世界中,您拥有所有模型数据的标记,但由于我们处于HTML世界中,因此没有,因此您必须使用XSLT或使用ViewHelpers.
让我们关注ViewHelper方法.
这很难维护:
<div id="items">
<?php
for($i=0; $i<count($main); $i++) {
echo '<div class="item">
<div class="name">'.$main[$i]['name'].'</div>';
if($main[$i]['icq']=='') { }
else { echo '<div class="phone">'.$main[$i]['phone'].'</div>'; }
echo '</div>';
}
?>
</div>
如果用Smarty替换PHP,它将不会变得更好.这很容易维护:
<div id="items">
<?php echo itemlist($items, 'template.htm') ?>;
</div>
在现在删除的问题下面,有一个评论员反对这个“代码对于非编码人员来说不容易维护,因为现在他们不知道项目列表的定义在哪里以及它做了什么.”但这完全是胡言乱语.想想它一秒钟.
一方面,他们声称非编码人员会遇到一个简单的函数调用问题,但另一方面他们希望他们理解与HTML混合的PHP代码的混乱.设计师不关心表示逻辑,而只关心实际的表示.输出.
一个单独的函数调用清楚地说:“这里是一个项目列表”,这比“这是一个回声div和其他东西,如果给出icq”更容易掌握.函数调用与标记一样好.它明确定义了输入和输出.除了开发人员之外,它如何实现输出与任何人无关.
ViewHelper封装了表示逻辑.这是一个可以在所有视图中重用的片段.这比在需要时一遍又一遍地复制和粘贴所有逻辑更加可维护.在上面的示例中,帮助程序有两个参数:
> $items是一个数组或其他可遍历的类型,用于保存您的实际商品数据
>’template.htm’是用于呈现数据的模板的文件名
我会将第二个选项作为可选项,因为我认为它始终是相同的模板.但是,由于评论员抱怨非编码人员不知道在哪里看,我觉得有必要说明告诉非编码人员在哪里看起来是多么容易.
function itemlist($items, $template = './templates/itemlist.htm') {
ob_start();
foreach($items as $item) {
include $template;
}
return ob_get_flush();
}
可能有更有效的方法来解决包含模板的问题.但主要想法应该是明确的.隐藏实际模板中的表示逻辑.您的“template.htm”将如下所示:
<div class="item">
<div class="name"><?php echo $item['name'] ?></div>
<?php echo contact($item, 'icq' 'phone'); ?>
</div>
不,如果和没有.没有字符串连接或花括号.决定如何联系用户的逻辑也隐藏在ViewHelper中.所有非编码人员现在都必须知道ViewHelpers的参数,这就像知道要写入标签的属性一样简单.如有必要,给他们一个备忘单.
相关信息:
> http://martinfowler.com/eaaCatalog/templateView.html
编辑
由于下面的两条评论,我决定扩大这个答案.以上不是抽象的抽象.它是为了可重用性和可维护性.我已经在上面指出了这一点,但让我再次在这里解释一下.
实际上,我发现反对使用ViewHelpers很奇怪,因为你将“在两个地方进行演示”但不要抱怨分隔页眉,横幅和页脚.这是同一件事.您可以隔离可重用的部件并将它们放入自己的模板中.在该步骤中将逻辑与模板分离只是获得更高可维护性的自然下一步.
包含逻辑的视图模板实际上是脚本而不是模板.任何包含组装逻辑的视图模板都注定要重演.这可能不是小型网站的问题,但如果您正在使用几十个甚至几百个视图和小部件的网站上工作,那么不抽象这些部分将导致代码重复.将所有逻辑放入模板中,它将很快变成混乱条件的c& p’ed标记.对于任何重复,您将加倍更改它所需的时间.添加内联样式和突出的Javascript,你在维护hell.¹
如果您将OOP用于应用程序的其他部分,那么为什么要在您的视图中使用OOP?如果你明白你应该从HTML中分离Javascript和CSS,为什么要将PHP混合到你的模板中?这没有意义. OP的代码片段是脚本而不是模板.因此,它是开发人员的领域.因此,您将所有适用于您应用程序其他部分的良好实践应用于此.这包括将逻辑隔离到函数和/或类中.
当然,寻找脚本的设计师可能不会立即知道发生了什么.但话说回来,一旦你开始添加本机PHP函数,她可能也不会知道.什么是mb_strimwidth呢?和substr?那是什么?:构造?您添加的实际PHP越多,为非开发人员阅读的难度就越大.
如果您希望设计人员使用模板,请不要为他们提供脚本.给他们模板.如果这样做,请将逻辑与其隔离,并用易于掌握的函数调用替换它.使用能够清楚地传达函数功能的函数名称.因此,设计人员只需要知道“我是否使用此输入,我将始终获得该输出.我不关心输出的结果.我将把它留给开发人员”.
将逻辑隔离到函数(或类)中还为您提供了直接的优势,即能够单独测试用于在该页面上呈现特定部分的逻辑.您不必设置创建页面所需的整个环境,只需传入所需的输入并断言它的输出(这就是函数缓冲字符串而不是输出btw的原因).
¹对于那些认为这不是问题的人,我强烈建议您找到一个真正保留视图模板中所有逻辑的遗留应用程序.尝试改变一些事情.一旦你有幸吃了2500行意大利面条代码,每个代码至少有500个字符,并且包含重复的PHP,HTML,CSS和JavaScript,你就会知道我在说什么.
内容总结
以上是互联网集市为您收集整理的php – CodeIgniter视图中应该有多少代码?全部内容,希望文章能够帮你解决php – CodeIgniter视图中应该有多少代码?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。