標籤:linux nginx mysql php yaf mvc
1、下載yaf源碼包yaf-2.2.9.tar.gz,並將其上傳到伺服器指定的位置,然後解壓並安裝:
[[email protected] src]# tar -xvf yaf-2.2.9.tar.gz
進入解壓後的目錄:
[[email protected] src]# cd yaf-2.2.9
一次執行:
[[email protected] yaf-2.2.9]# /usr/local/php/bin/phpize
[[email protected] yaf-2.2.9]# ./configure --with-php-config=/usr/local/php/bin/php-config
[[email protected] yaf-2.2.9]# make && make install
2、查看編譯後的檔案:
[[email protected] ~]# ll /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/yaf.so
-rwxr-xr-x 1 root root 771610 Jul 8 18:13 /usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/yaf.so
//可以看到 yaf.so php擴充也已經幫我們編譯好了
3、配置 php.ini
[[email protected] ~]# vim /usr/local/php/lib/php.ini
extension=yaf.so //然後在php.ini中載入yaf.so
4、重啟php-fpm
[[email protected] ~]# service php-fpm restart
Gracefully shutting down php-fpm . done
Starting php-fpm done
5、查看phpinfo()
3、利用Yaf內建的快速代碼產生工具 yaf_code_generator 產生代碼:
1)下載yaf工具包,瀏覽https://github.com/laruence/php-yaf,下載源碼包php-yaf-yaf-2.2.9.tar.gz,並將其上傳到伺服器指定位置,然後解壓:
[[email protected] src]# tar -xvf php-yaf-yaf-2.2.9.tar.gz
然後進入解壓後的目錄:
[[email protected] src]# cd php-yaf-yaf-2.2.9
然後進入tools/cg目錄下:
[[email protected] php-yaf-yaf-2.2.9]# cd tools/cg/
然後執行(app是產生的目錄名):
[[email protected] cg]# /usr/local/php/bin/php yaf_cg app
執行以上代碼,將在cg/output/目錄產生一份yaf的骨架代碼app
2)將產生的app項目骨架代碼複製到nginx的html(網站根目錄)目錄下:
[[email protected] ~]# cp -r /usr/src/php-yaf-yaf-2.2.9/tools/cg/output/app /usr/local/nginx/html/
3)一個典型的yaf應用的目錄結構:
+ public
|- index.php //入口檔案
|- .htaccess //重寫規則
|+ css
|+ img
|+ js
+ conf
|- application.ini //設定檔
+ application
|+ controllers
|- Index.php //預設控制器
|+ views
|+ index //控制器
|- index.phtml //預設視圖
|+ modules //其他模組
|+ library //本地類庫
|+ models //model目錄
|+ plugins //外掛程式目錄
入口檔案:是所有請求的入口,一般都藉助於rewrite規則,把所有的請求都重新導向到這個入口檔案,一個經典的入口檔案如下:
[[email protected] app]# vim index.php
<?php
define(‘APPLICATION_PATH‘, dirname(__FILE__));
$application = new Yaf_Application( APPLICATION_PATH . "/conf/application.ini");
$application->bootstrap()->run();
?>
設定檔:在Yaf中, 設定檔支援繼承,支援分節。 並對PHP的常量進行支援, 不用擔心設定檔太大造成解析效能問題, 因為Yaf會在第一個啟動並執行時候載入設定檔, 把格式化後的內容保持在記憶體中,直到設定檔有了修改,才會再次載入,一個簡單的設定檔:
[[email protected] conf]# vim application.ini
[common]
application.directory = APPLICATION_PATH "/application"
application.dispatcher.catchException = TRUE
[product : common]
重寫規則:除非我們使用基於query string的路由協議(Yaf_Route_Simple, Yaf_Route_Supervar), 否則我們就需要使用WebServer提供的Rewrite規則, 把所有這個應用的請求, 都定向到上面提到的入口檔案;
Nginx的Rewrite (nginx.conf),按如下修改檔案:
[[email protected] conf]# vim nginx.conf
location / {
root html/app;
#root html;
index index.html index.htm index.php;
}
location ~ \.php$ {
root html/app;
#root html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi_params;
}
if (!-e $request_filename) {
#rewrite ^/(.*) /index.php/$1 last; //這樣不行
rewrite ^/(.*) /index.php?$1 last;
}
修改完設定檔nginx.conf後記得重啟:
[[email protected] conf]# service nginx restart
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
Stopping nginx: [ OK ]
Starting nginx: [ OK ]
4)一個基於Yaf架構的MVC的簡單例子:
控制器(controllers):在Yaf中, 預設的模組/控制器/動作,都是以Index命名的,當然,這是可通過設定檔修改的。對於預設模組,控制器的目錄是在application目錄下的controllers目錄下,Action的命名規則是"名字+Action";
[[email protected] controllers]# vim Test.php
<?phpclass TestController extends Yaf_Controller_Abstract { public function testAction() { //1. fetch query $get = $this->getRequest()->getQuery("get", "default value"); //2. fetch model $model = new TestModel(); //3. assign $this->getView()->assign("lists", $model->selectName()); return TRUE; }}?>
模型(models):資料擷取類, 可以訪問資料庫,檔案,其它系統等
[[email protected] models]# vim Test.php
<?php/** * @models資料擷取類, 可以訪問資料庫,檔案,其它系統等 */class TestModel { public function __construct() { } public function selectName() { $host="localhost"; $user="root"; $passwd="20082009"; $db="heat"; $query = "select name,content from heat1 order by name"; $mysqli = new mysqli($host,$user,$passwd) or dir("Unable to connect to mysql!"); $mysqli->select_db($db); $mysqli->query("SET NAMES 'utf8'");// $result = $mysqli->query($query); while($rows = $result->fetch_array()){ $lists[] = $rows; //$lists = iconv("utf-8","gbk",$lists);//編碼轉換函式iconv只能接受字串參數 } $result->free(); //釋放資源 $mysqli->close();//關閉資料庫連接 $result = $lists; //數組編碼解決方案 $result = eval('return '.iconv('utf-8','gbk',var_export($result,true)).';'); return $result; }}?>
其中資料庫heat中表heat1的內容為:
視圖(views):Yaf支援簡單的視圖引擎, 並且支援使用者自訂自己的視圖引擎,比如Smarty。
對於預設模組,視圖檔案的路徑是在application目錄下的views目錄中以小寫action名的目錄中;
[[email protected] test]# vim test.phtml
<?php//迴圈輸出數組內容foreach($lists as $list){echo $list['name'], " please see: ", $list['content'];echo "<br />";}?>
在瀏覽器輸入:http://172.16.2.33/index.php/Test/test,即顯示如下頁面:
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。
LNMP(Linux+Nginx+Mysql+PHP)環境下安裝yaf架構並編寫一個MVC例子