Yaf 初體驗

關於yaf,php擴展實現的框架,做者鳥哥:http://www.laruence.com/。php

寫着篇文章的目的是是爲了更快的熟悉yaf。html

文檔,http://www.laruence.com/manual/。mysql

一、安裝linux

  windowsql

  下載:http://pecl.php.net/package/yaf/2.3.2/windows數據庫

    (注意php版本、64/32位系統,thread_safe模式根據你phpinfo()裏的Thread Safety是否enable決定)bootstrap

  安裝:直接解壓到php的ext目錄下就行了,修改php.ini windows

extension=php_yaf.dll

  linuxapp

  下載: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擴展表示安裝成功。

 

二、Hello world

  這個偷懶,直接去看文檔就行了:http://www.laruence.com/manual/tutorial.firstpage.html。

 

三、配置

  配置方面說實話,看開發人的習慣了,樓主說下本身的

  首先,yaf.environ博主放在了php.ini中,這樣能夠必定程度上區分生產環境與開發環境,從而減小誤上線配置的問題。

  3.一、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.二、路由

  路由就要說到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]  

 

 

四、其餘

  一、自動加載方式

    Controller  默認模塊下爲{項目路徑}/controllers/, 不然爲{項目路徑}/modules/{模塊名}/controllers/

    Model    {項目路徑}/models/

    Plugin    {項目路徑}/plugins/


  二、命名方式

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

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

 
  好比model下的Bbs下的Post.php,實例化方式爲$postObj = new Bbs_PostModel();

  

OK,想到再補充

相關文章
相關標籤/搜索