一、瞭解
·yaf是php框架中性能最好的框架,因爲它是用c語言以擴展方式實現的,其框架類、配置常駐內存。
·相較原生php的類,經過ab測試,性能損失僅約10%。
·支持自定義視圖解析、路由,且擁有高性能的視圖解析器,多種路由。
·優點是足夠快,缺點是,不能使用在部分php擴展不能自定義的服務器/虛擬主機上。
二、使用準備:
1、要求:
·php版本:5.2+
·啓用spl、pcre擴展
2、Linux下安裝:
·下載框架並解壓,進入框架目錄,執行:
/php-bin-path../phpize
./configure --with-php-config=/php-bin-path../php-config
make
make install
·在php.ini擴展部分加入:yaf.so
·重啓php-fpm,或者服務器(取決於php運行方式)
3、Windows下安裝:
直接下載yaf.dll到php\ext擴展庫目錄下並在配置文件中啓用(需php5.3+)。
二、快速開始:
1、項目目錄規範:(+指目錄 -指文件:)
+ public
- index.php //入口文件
- .htaccess //重寫規則
+ css
+ img
+ js
+ conf
- application.ini //配置文件
+ application
+ controllers
- Index.php //默認控制器
+ views
+ index //控制器
- index.phtml //默認視圖
+ modules //其他模塊
+ library //本地類庫
+ models //model目錄
+ plugins //插件目錄
2、使用 webserver 各自的 rewrite 方式將請求定位到 public/index.php
3、編寫php文件:
·入口文件:public/index.php:
<?php
define("APP_PATH", realpath(dirname(__FILE__) . '/../')); /* 指向public的上一級 */
$app = new Yaf_Application(APP_PATH . "/conf/application.ini");
$app->run();
·配置文件:application/conf/application.ini
[product]
;支持直接寫PHP中的已定義常量
application.directory=APP_PATH "/application/"
·控制文件:application/controllers/Index.php 遵循控制器名:[Name]Controller,方法名:[Name]Action
<?php
class IndexController extends Yaf_Controller_Abstract {
public function indexAction() {//默認Action
$this->getView()->assign("content", "Hello World");
}
}
?>
·視圖文件:application/views/index/index.phtml
<html>
<head>
<title>Hello World</title>
</head>
<body>
<?php echo $content;?>
</body>
</html>
4、瀏覽器訪問:
http://www.yourhostname.com/application/index.php
5、更簡單的方法是,使用命令自動生成項目文件,方法:
·執行:yaf目錄/tools/cg/yaf_cg [項目名稱]
·訪問:http://www.yourhostname.com/sample/
三、高級:
1、自動加載:項目僅加載規範目錄下的文件,即Controller中找XxxController,Model、Plugin目錄中找XxxModel、XxxPlugin
2、自定義加載:
如果你有多個項目,那麼所有應用中都用到的類,可以在php.ini中,使用ap.library聲明類目錄
如果只某項目中用到的,則在該項目自己的配置文件中,使用ap.librafy聲明類目錄
這兩種自動加載機制的相關類加載機制,遵循 Foo_Bar_Name 文件,在 $ap.library/Foo/Bar 下查找 Name。
3、bootstrap:也叫做引導程序. 它是Yaf提供的一個全局配置的入口, 可以做很多全局自定義的工作:使用:
http://www.laruence.com/manual/ch06s02.html
4、插件:Yaf支持用戶定義插件來擴展Yaf的功能, 這些插件都是一些類. 它們都必須繼承自Yaf_Plugin_Abstract,使用:
http://www.laruence.com/manual/yaf.plugin.html
5、路由使用:
http://www.laruence.com/manual/yaf.routes.html
6、命令行中使用yaf:http://www.laruence.com/manual/yaf.incli.html
7、異常定義:http://www.laruence.com/manual/yaf.catcherror.html
8、內建類:http://www.laruence.com/manual/yaf.classes.html
四、應用參考:
配置參考:紅色爲必選
名稱 | 值類型 | 默認值 | 說明 |
---|---|---|---|
application.directory | String | 應用的目錄路徑(絕對路徑) | |
application.ext | String | php | PHP腳本的擴展名 |
application.bootstrap | String | Bootstrapplication.php | Bootstrap路徑(絕對路徑) |
application.library | String | application.directory + "/library" | 本地(自身)類庫的絕對目錄地址 |
application.baseUri | String | NULL | 在路由中, 需要忽略的路徑前綴, 一般不需要設置, Yaf會自動判斷. |
application.dispatcher.defaultModule | String | index | 默認的模塊 |
application.dispatcher.throwException | Bool | True | 在出錯的時候, 是否拋出異常 |
application.dispatcher.catchException | Bool | False | 是否使用默認的異常捕獲Controller, 如果開啓, 在有未捕獲的異常的時候, 控制權會交給ErrorController的errorAction方法, 可以通過$request->getException()獲得此異常對象 |
application.dispatcher.defaultController | String | index | 默認的控制器 |
application.dispatcher.defaultAction | String | index | 默認的動作 |
application.view.ext | String | phtml | 視圖模板擴展名 |
application.modules | String | Index | 聲明存在的模塊名, 請注意, 如果你要定義這個值, 一定要定義Index Module |
application.system.* | String | * | 通過這個屬性, 可以修改yaf的runtime configure, 比如application.system.lowcase_path, 但是請注意只有PHP_INI_ALL的配置項纔可以在這裏被修改, 此選項從2.2.0開始引入 |
系統配置:
選項名稱 | 默認值 | 可修改範圍 | 更新記錄 |
---|---|---|---|
yaf.environ | product | PHP_INI_ALL | 環境名稱, 當用INI作爲Yaf的配置文件時, 這個指明瞭Yaf將要在INI配置中讀取的節的名字 |
yaf.library | NULL | PHP_INI_ALL | 全局類庫的目錄路徑 |
yaf.cache_config | 0 | PHP_INI_SYSTEM | 是否緩存配置文件(只針對INI配置文件生效), 打開此選項可在複雜配置的情況下提高性能 |
yaf.name_suffix | 1 | PHP_INI_ALL | 在處理Controller, Action, Plugin, Model的時候, 類名中關鍵信息是否是後綴式, 比如UserModel, 而在前綴模式下則是ModelUser |
yaf.name_separator | "" | PHP_INI_ALL | 在處理Controller, Action, Plugin, Model的時候, 前綴和名字之間的分隔符, 默認爲空, 也就是UserPlugin, 加入設置爲"_", 則判斷的依據就會變成:"User_Plugin", 這個主要是爲了兼容ST已有的命名規範 |
yaf.forward_limit | 5 | PHP_INI_ALL | forward最大嵌套深度 |
yaf.use_namespace | 0 | PHP_INI_SYSTEM | 開啓的情況下, Yaf將會使用命名空間方式註冊自己的類, 比如Yaf_Application將會變成Yaf\Application |
yaf.use_spl_autoload | 0 | PHP_INI_ALL | 開啓的情況下, Yaf在加載不成功的情況下, 會繼續讓PHP的自動加載函數加載, 從性能考慮, 除非特殊情況, 否則保持這個選項關閉 |
常量參考:
常量(啓用命名空間後的常量名) | 說明 |
---|---|
YAF_VERSION(Yaf\VERSION) | Yaf框架的三位版本信息 |
YAF_ENVIRON(Yaf\ENVIRON | Yaf的環境常量, 指明瞭要讀取的配置的節, 默認的是product |
YAF_ERR_STARTUP_FAILED(Yaf\ERR\STARTUP_FAILED) | Yaf的錯誤代碼常量, 表示啓動失敗, 值爲512 |
YAF_ERR_ROUTE_FAILED(Yaf\ERR\ROUTE_FAILED) | Yaf的錯誤代碼常量, 表示路由失敗, 值爲513 |
YAF_ERR_DISPATCH_FAILED(Yaf\ERR\DISPATCH_FAILED) | Yaf的錯誤代碼常量, 表示分發失敗, 值爲514 |
YAF_ERR_NOTFOUND_MODULE(Yaf\ERR\NOTFOUD\MODULE) | Yaf的錯誤代碼常量, 表示找不到指定的模塊, 值爲515 |
YAF_ERR_NOTFOUND_CONTROLLER(Yaf\ERR\NOTFOUD\CONTROLLER) | Yaf的錯誤代碼常量, 表示找不到指定的Controller, 值爲516 |
YAF_ERR_NOTFOUND_ACTION(Yaf\ERR\NOTFOUD\ACTION) | Yaf的錯誤代碼常量, 表示找不到指定的Action, 值爲517 |
YAF_ERR_NOTFOUND_VIEW(Yaf\ERR\NOTFOUD\VIEW) | Yaf的錯誤代碼常量, 表示找不到指定的視圖文件, 值爲518 |
YAF_ERR_CALL_FAILED(Yaf\ERR\CALL_FAILED) | Yaf的錯誤代碼常量, 表示調用失敗, 值爲519 |
YAF_ERR_AUTOLOAD_FAILED(Yaf\ERR\AUTOLOAD_FAILED) | Yaf的錯誤代碼常量, 表示自動加載類失敗, 值爲520 |
YAF_ERR_TYPE_ERROR(Yaf\ERR\TYPE_ERROR) | Yaf的錯誤代碼常量, 表示關鍵邏輯的參數錯誤, 值爲521 |