Yaf 初体验

关于yaf,php扩展实现的框架,作者鸟哥:http://www.laruence.com/。

写着篇文章的目的是是为了更快的熟悉yaf。

文档,http://www.laruence.com/manual/。

1、安装

  window

  下载:http://pecl.php.net/package/yaf/2.3.2/windows

    (注意php版本、64/32位系统,thread_safe模式根据你phpinfo()里的Thread Safety是否enable决定)

  安装:直接解压到php的ext目录下就好了,修改php.ini 

extension=php_yaf.dll

  linux

  下载:http://pecl.php.net/package/yaf(注意php版本)

  安装: 解压缩以后, 进入Yaf的源码目录, 依次执行(其中PHP_BIN是PHP的bin目录):

$PHP_BIN/phpize
./configure --with-php-config=$PHP_BIN/php-config
make
make install

  

  然后查看phpinfo(),如果出现yaf扩展表示安装成功。

 

2、Hello world

  这个偷懒,直接去看文档就好了:http://www.laruence.com/manual/tutorial.firstpage.html。

 

3、配置

  配置方面说实话,看开发人的习惯了,楼主说下自己的

  首先,yaf.environ博主放在了php.ini中,这样可以一定程度上区分生产环境与开发环境,从而减少误上线配置的问题。

  3.1、conf

  楼主分成了主配置和常用配置,先贴图

  

  主配置:application.ini,(application.directory,use_namespace等配置项)

  常用配置:mysql.ini,route.ini...

  这些配置其实是按需加载的,方法加载方式:new Yaf_Config_Ini($inifile, ini_get('yaf.environ'));

  这时候出现了一个问题,就是如果一个请求多次用到了数据库,我们就需要把配置存起来而不是每次去open这个文件。

  楼主简单封了一个配置的类,贴代码

<?php
/**
 * get & init config
 * @author wangzhitao
 *
 */
class LibConfig{

    private static $_DB_CONFIG = null;
    private static $_ROUTE_CONFIG = null;
    
    public static function getDbConfig()
    {
        if (self::$_DB_CONFIG===null){
            $inifile = APP_PATH . '/conf/mysql.ini';
            self::$_DB_CONFIG = new Yaf_Config_Ini($inifile, ini_get('yaf.environ'));
        }
        return self::$_DB_CONFIG;
    }
    
    public static function getRouteConfig()
    {
        if (self::$_ROUTE_CONFIG===null){
            $inifile = APP_PATH . '/conf/route.ini';
            self::$_ROUTE_CONFIG = new Yaf_Config_Ini($inifile, ini_get('yaf.environ'));
        }
        return self::$_ROUTE_CONFIG;
    }
}

  当然你也可以用yaf的register。

    Yaf_Registry::set($name, $value);
    Yaf_Registry::get($name);

 

  3.2、路由

  路由就要说到bootstrap了,因为博主是在bootstrap里面加载的路由配置

  在公共入口文件里这样写,$app->bootstrap()->run();

  yaf会自动去application目录下寻找Bootstrap.php,贴代码

<?php 
class Bootstrap extends Yaf_Bootstrap_Abstract{
    
    public function _initConfig() {
        $config = Yaf_Application::app()->getConfig();
        Yaf_Registry::set("config", $config);
    }
    
    /**
     * 实例化路由
     * @param Yaf_Dispatcher $dispatcher
     */
    public function _initRoute(Yaf_Dispatcher $dispatcher) 
    {
        $router = Yaf_Dispatcher::getInstance()->getRouter();
        $routeConf = LibConfig::getRouteConfig();
        $router->addConfig($routeConf->routes);
    }
    
}

  route.ini,毕竟会遇到很多自定义的路由配置

[common]
    routes.bbsindex.type="rewrite"
    routes.bbsindex.match="/bbs/:name/:value"
    routes.bbsindex.route.controller=bbs
    routes.bbsindex.route.action=index
    
    routes.bbslist.type="rewrite"
    routes.bbslist.match="/bbslist/:name/:value"
    routes.bbslist.route.controller=bbs
    routes.bbslist.route.action=index
    
[develop : common]  

 

 

4、其他

  1、自动加载方式

    Controller  默认模块下为{项目路径}/controllers/, 否则为{项目路径}/modules/{模块名}/controllers/

    Model    {项目路径}/models/

    Plugin    {项目路径}/plugins/


  2、命名方式

    controller:文件名Xxx.php,类名XxxController

    model:文件名Xxx.php,类名Dir_XxxModel

 
  比如model下的Bbs下的Post.php,实例化方式为$postObj = new Bbs_PostModel();

  

OK,想到再补充

posted @ 2015-05-12 19:07  iamdoufu  阅读(1028)  评论(0编辑  收藏  举报