LNMP(Linux+Nginx+Mysql+PHP)環境下安裝yaf架構並編寫一個MVC例子

來源:互聯網
上載者:User

標籤: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例子

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.