Yaf框架安装指南

提及PHP框架,不少人的印象都停留在一个由PHP实现的基于MVC的各类功能组合的代码包。极少有人知道C语言也能写PHP框架,而且速度比PHP写的框架快上10倍以上。php

Yaf是一款以C语言写的PHP框架。它以PHP扩展的方式运行框架。只实现了MVC最核心部分的功能:路由、MVC。Yaf内核够精简稳定,因此,几乎不会遇到运行上的问题。风险可控,性能优异。固然,由于简单,因此,你须要实现DB的封闭、Session的扩展等操做。css

身为PHP程序员,对于由亚洲第一程序员:鸟哥,编写的框架应该不陌生,那么它有什么优势呢?html

  • C语言开发的PHP框架, 相比原生的PHP, 几乎不会带来额外的性能开销.
  • 全部的框架类, 不须要编译, 在PHP启动的时候加载, 并常驻内存.
  • 更短的内存周转周期, 提升内存利用率, 下降内存占用率.
  • 灵巧的自动加载. 支持全局和局部两种加载规则, 方便类库共享.
  • 高性能的视图引擎.
  • 高度灵活可扩展的框架, 支持自定义视图引擎, 支持插件, 支持自定义路由等等.
  • 内建多种路由, 能够兼容目前常见的各类路由协议.
  • 强大而又高度灵活的配置文件支持. 并支持缓存配置文件, 避免复杂的配置结构带来的性能损失.
  • 在框架自己,对危险的操做习惯作了禁止.
  • 更快的执行速度, 更少的内存占用.

Yaf框架中文文档:http://www.laruence.com/manual/nginx

框架安装:git

一:框架安装

Yaf扩展主页:http://pecl.php.net/package/yaf
程序员

$ wget http://pecl.php.net/get/yaf-3.0.7.tgz
$ tar -zxvf yaf-3.0.7.tgz
$ cd yaf-3.0.7
$ /path/to/phpize
$./configure --with-php-config=/path/to/php-config
$ make && make test && make install

tip:github

在执行编译命令/path/to/phpize,命令的时候可能会出现以下错误:浏览器

Configuring for:
PHP Api Version:         20151012
Zend Module Api No:      20151012
Zend Extension Api No:   320151012
Cannot find autoconf. Please check your autoconf installation and the
$PHP_AUTOCONF environment variable. Then, rerun this script.

可参考:https://blog.csdn.net/alen_xiaoxin/article/details/80255766,寻找解决办法。缓存

编译完成生成扩展以后,修改php.ini,在php.ini文件末尾加以下配置:服务器

[yaf]
yaf.use_namespace = 0
yaf.environ = 'product'
yaf.cache_config = 0
yaf.name_suffix = 1
yaf.lowcase_path = 1

extension = yaf.so

添加完以后,可查看phpinfo是否存在yaf扩展。

配置说明:
  • yaf.user_namespace 为1是开启命名空间模式。0关闭。
  • yaf.environ 是默认状况下Yaf读取的环境配置是什么。
  • yaf.cache_config 是否缓存项目配置。
  • yaf.name_suffix 开启后缀。即为1以后,类名将以XxxModel.php、XxxController.php模式加载。
  • yaf.lowcase_path 路径信息中的目录部分都会被转换成小写。

2、建立第一个Yaf项目

有两种建立方式:

  1. 手动建立目录
  2. 使用Yaf提供的命令行生成目录

第二种方法可自行到:https://github.com/laruence/php-yaf,下载源码,由于 Yaf 提供的命令工具没有随 Yaf 源码一块儿,在该项目下面有一个tools文件夹,里面就是命令行工具。

一个典型的目录结构:

+ public
  |- index.php //入口文件
  |- .htaccess //重写规则    
  |+ css
  |+ img
  |+ js
+ conf
  |- application.ini //配置文件   
+ application
  |+ controllers
     |- Index.php //默认控制器
  |+ views    
     |+ index   //控制器
        |- index.phtml //默认视图
  |+ modules //其余模块
  |+ library //本地类库
  |+ models  //model目录
  |+ plugins //插件目录

入口文件:

入口文件是全部请求的入口, 通常都借助于rewrite规则, 把全部的请求都重定向到这个入口文件。

一个经典的入口文件piublic/index.php:

<?php
define("APP_PATH",  realpath(dirname(__FILE__) . '/../')); /* 指向public的上一级 */
$app  = new Yaf_Application(APP_PATH . "/conf/application.ini");
$app->run();

重写规则:

Apache的Rewrite (httpd.conf):

#.htaccess, 固然也能够写在httpd.conf
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

Nginx的Rewrite (nginx.conf):

server {
  listen ****;
  server_name  domain.com;
  root   document_root;
  index  index.php index.html index.htm;

  if (!-e $request_filename) {
    rewrite ^/(.*)  /index.php/$1 last;
  }
}

配置文件:

在Yaf中, 配置文件支持继承, 支持分节. 并对PHP的常量进行支持. 你不用担忧配置文件太大形成解析性能问题, 由于Yaf会在第一个运行的时候载入配置文件, 把格式化后的内容保持在内存中. 直到配置文件有了修改, 才会再次载入。

一个简单的配置文件application/application.ini:

[product]
;支持直接写PHP中的已定义常量
application.directory=APP_PATH "/application/"

控制器:

在Yaf中, 默认的模块/控制器/动做, 都是以Index命名的, 固然,这是可经过配置文件修改的.

对于默认模块, 控制器的目录是在application目录下的controllers目录下, Action的命名规则是"名字+Action"

默认控制器application/controllers/Index.php

<?php
class IndexController extends Yaf_Controller_Abstract {
   public function indexAction() {//默认Action
       $this->getView()->assign("content", "Hello World");
   }
}
?>

视图文件:

Yaf支持简单的视图引擎, 而且支持用户自定义本身的视图引擎, 好比Smarty。

对于默认模块, 视图文件的路径是在application目录下的views目录中以小写的action名的目录中。

一个默认Action的视图application/views/index/index.phtml

<html>
 <head>
   <title>Hello World</title>
 </head>
 <body>
  <?php echo $content;?>
 </body>
</html>

运行:

在浏览器输入你服务器配置的域名便可:

http://www.yourhostname.com/application/index.php

我是在本地配置的直接把端口指向public目录,因此直接输入:localhost:8081,便可看到

注意:

若是看不到Hello world,那么请到服务器查看PHP的错误日志,找出问题在哪里。