许多CMS,Blog等系统都是用PHP开发的, 一部分原有是因为 PHP + MySQL + apache/nginx/IIS 环境比较易搭建
而且还开源, 移植也比较方便。
可能很多PHP开发人员都在找一个高效,维护容易的框架。我就是其中一位, 一不小心, 我跌入了 CodeIgnter 的怀抱,
刚开始学习PHP, 确实有很多地方很不顺手, 可能是自己太菜, 入手很久, 感觉只搞明白了 CodeIgnter 的皮毛。 后来由于
种种原因, 一位朋友指点我们用国外兴起的一个新的框架 bonfire 。顿时我的新就凉了。CodeIgnter还没搞特别清楚, 又
来了一个新的框架, 经过朋友预先了解此框架, 给我讲解了一下 bonfire 和 CodeIgnter 的区别以及关联。这才知道原来
不是要学习一个崭新的框架, 而是一个把 CodeIgnter 扩展后的高效框架, 只是模式由原来的 MVC 接近无缝的方式升级
为了 HMVC 。
新手的我自然难以迅速上手, 所以看了一些 bonfire的代码后, 发现最厌恶的事情来了, bonfire 提供了一套 theme
其中分为 前台theme 和 后台theme 。一直以来我都觉得 theme 在这种框架中是很让人厌恶的, 因为他会限制自由。
正如我所想, 由于一个项目需要在 bonfire 上进行, 一位同事早在我之前开始研究 bonfire ,设计好我们所需的后端
我则在忙完手中的活以后, 被调到协助同事一起实现前段。当天晚上, 好好看了一下同事写的代码。肯定比我写的好, 我
太菜了。不过发现一个有趣的事情, 就是他很好的利用了 bonfire 的 HMVC 模式, 将所有功能都独立的分配到了 modules
模块下, 这样便于每个功能独立的管理, 赞叹了一把, 因为我还不熟悉这种模式。
第二天, 早上我忙完手上一些简单的事情后, 为了统一编程风格和实现方向, 我们2个人在开会的地方开了一个小会议
一切都比较顺利, 可是不顺利的终归是要来的, 由于我们希望把我们的网站做的足够模块化, 那样不至于修改一处, 影响一堆
所以我们需要把首页中的 3 部分纵向排开的区域作为 3 个模块来实现, 但是要用到模板, 因为那样更容易管理, 同时也给我
提供了一个具有方向性的信息, 使用一个 modules::run(module/class/method) 应该可以实现我所需要的实现方式。
我先了解理一下该框架的 template , 自己新建另一个简单的 theme 后, 开始了尝试 让局部区域模块化的征程。
由于这个有用的信息, 我尝试 modules::run(module/class/method) 一直会报错, 查看源码对应的函数, 发现返回值一直
是空的, 当然页面看不到变化...但是调试多了, 变化还是有的, 只是很想笑的事情发生了, 页面的模板被加载两次, 这样的页面
你们想一下估计也能想象得到当时的情景, 更何况还有一个 errer 无法 locate file 。难道 bonfire 会 so silly 。事实上, 还是
我们错了, 由于 bonfire 是新出来的框架, 所以说明文档一直在更新完善, 不过在查看许久后, 终于发现了一个让人兴奋的word
"block" 。 是的, "block" 一个让我觉得 bonfire 可以实现高度模块化的途径。
下面直接讲实现方法, 在 theme 的php文件中, 在需要自定义显示的区域添加如下code
<aside id="cust_define">
<?php echo Template::block('cust_define'); ?>
</aside>
然后在某一个要 controller 中, 定义一段绑定 view 到这个 block 的 code
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Home extends Front_Controller {
public function index()
{
Template::set_block('cust_define', 'show/main'); // 仔细看这里 aside id 和 view path
Template::render();
}
}
最后记得检查是否存在 view modules/show/views/main.php
这只是一种方法用来实现这一部分, 这种方法有一个局限性就是,没有经过 model 所以无法给 view 里面传数据,
不需传数据的方法, 这样处理的方式还是比较好的, 当然后续还会跟进有关bonfire的其他相关方法。
当然不一定是最好的, 但是希望有帮助!
有兴趣的朋友可以加入Bonfire群: 36544181