月度归档:2014年06月

构建一个属于你的PHP MVC 框架—-5.我要一张漂亮的脸:视图控制

视图控制对于一个成型的MVC框架而言,说的是V层。这一层,是跟用户距离最近的一层。
谈到视图,就不得不说到模板,自然也就离不开模板引擎。
很多框架把这一层用成型的smarty来代替,不失为一种不错的解决方案。但是,个人对smarty不怎么感冒,所以,这里说的不是那种办法。其实,个人觉得php本身就是一个天然的模板引擎,对此,何必引入第三方呢。

一种最简单解决办法就是,把需要放入模板中得变extract出来,然后,直接include进来模板文件。ok,解决问题:

简单的demo代码如下:
控制器中的代码:

$view_vars = array(
    'a'=>'A',
    'b'=>'B',
);
extract($view_vars);
include 'b.php'; 

一个简单的视图:

<?php echo $a . $b . "<p>";

当然很多时候需要对输出进行一些控制:
比如说你的应用在之前引用过fonts.googleapi.com里的资源,现在GFW比较厉害,现在引用不到了。
一个直接的影响就是你的页面会打开起来特别特别慢。直到认为那个资源超时,
这个时候就需要把模板里的fonts.googleapi.com替换成一个可访问的域名。
也就是字符串替换。字符串处理不多讲,核心是把模板中得内容转成字符串变量,然后处理,最后重新echo

用到php的输出控制ob_start,ob_end_clean,ob_get_contents
控制器代码,用这类函数wrapper.

$view_vars = array(
    'a'=>'A',
    'b'=>'B',
);
ob_start();
extract($view_vars);
include 'b.php';
$contents = ob_get_contents();
ob_end_clean();
echo $contents; 

这样就可以对contents变量做相应的处理。