5.5 视图辅助类

Solar有很多可用的视图辅助类。本章和第一章都介绍了一些,例如:Solar_View_Helper_HeadSolar_View_Helper_GetTextSolar_View_Helper_GetTextRawSolar_View_Helper_EscapeSolar_View_Helper_Action。学习这些辅助类最好的方法就是看它们的API文档:http://solarphp.com/package/Solar_View_Helper

[Note]Note

Solar_View_Helper_Escape是你经常使用的最重要的辅助类之一。

另外,你可以在Solar中很容易扩展自己的视图辅助类。我们现在来写一个把10位数字转化为标准电话号码格式的辅助类。例如,把1235551212转化为(123) 555-1212

首先,我们要知道新的辅助类文件的位置。默认情况下,Solar会在下面两个位置寻找辅助类:

  1. SYSTEM/source/acme/Acme/View/Helper(Acme是我们的工作区)

  2. SYSTEM/source/solar/Solar/View/Helper

另外,你可以修改配置文件,在Solar寻找辅助类的类栈中增加新类。例如,在SYSTEM/config.php中添加如下代码:

$config['Solar_View']['helper_class'] = array('Acme_App_Helper');

这将会把类栈修改成下面这个样子:

  1. Acme_View_Helper

  2. Acme_App_Helper

  3. Solar_View_Helper

为了更直观,我们就使用默认的Acme_View_Helper类。

SYSTEM/source/acme/Acme目录下创建View目录。

$ cd SYSTEM/source/acme/Acme
$ mkdir View

SYSTEM/source/acme/Acme/View目录下创建另一个目录Helper

$ mkdir Helper

切换至Helper目录,并创建文件Phone.php

$ cd Helper
$ vim Phone.php

Phone.php文件中加入以下代码并保存。

<?php
/**
 * View helper to take a 10 digit number and 
 * convert to (###) ###-####
 *
 */
class Acme_View_Helper_Phone extends Solar_View_Helper {
    
    /**
    * Returns a formatted phone number.
    * @param string|int $number Unformatted number
    * @return string The formatted number
    */
    public function phone($number=null)
    {
        if (! $number) {
            return;
        }
        // Add your own validation logic here
        
        $code = substr($number, 0, 3);
        $prefix = substr($number, 3, 3);
        $line = substr($number, 6, 4);
        
        return $this->_view->escape("($code) $prefix-$line");
    }
}
?>

现在我们来测试一下,看是否有效果。记住此辅助类没有验证逻辑。

打开SYSTEM/source/acme/Acme/App/Blog/View/index.php视图文件,并加入以下代码:

<?php echo $this->phone('1235551212'); ?>

保存文件,浏览博客首页。你应该会在页面底部看到(123) 555-1212