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
<?php class 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,即显示如下页面:
版权声明:本文为博主原创文章,未经博主允许不得转载。