Yaf框架的使用总结


从入wb以来,我们的项目就没有离开过Yaf,在这里谈谈我对Yaf这个框架的使用感触吧。 实例是建立在一个管理系统项目基础上:

从鸟哥的博客上介绍:“Yaf是一个C语言编写的框架”,主要特定如下(摘自鸟哥网站):

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

那么,我们到底怎么用的,我们这里看下:

安装

从github上描述,Yaf需要php5.2以上版本,我们的系统都升级到了php7,所有开发都在php7下面。

我比较倾向于源码安装:

sudo phpize
./configure --with-php-config=/path/to/php-config
make && make install

代码路径及说明

├── application                       
│   ├── Bootstrap.php         // Yaf  web启动文件
│   ├── composer.json        //  composer依赖的文件,
│   ├── config                     //  一些配置文件
│   ├── controllers              //  controller模块
│   ├── library                     //  项目包含的一些公共的包
│   ├── models                  //    项目的模型层
│   ├── plugins                  //   中间件的内容
│   ├── vendor                  //   composer加载进来的一些包,这一部分是后来才加进来的
│   └── views                    //   视图层
└── public                          //   项目的入口文件和一些公共资源文件
    └── index.php                //   项目的入口文件,nginx配置项直接指向这个文件

Yaf项目配置文件

index.php中有个指向配置文件的地方, 这个代表会加载配置文件config/application.ini,里面会有一些Yaf的相关配置:

     $app = new Yaf_Application(APPLICATION_PATH . '/config/application.ini');

这个里面有一项:

     application.dispatcher.defaultRoute.type="map"
     application.dispatcher.defaultRoute.controllerPrefer=true

没有使用复杂的路由方式,如上配置,代表每个uri路径对应一个文件,如: /a/b/c /a/b_c 都对应 controllers/A/B/C.php 中的 class A_B_CController 中的indexAction方法,

后来我在plugins里面加了一个重写机制: 对应 /a/b_c 的路径,对应 class A_BController 的cAction的方法。

实际上不配置上面的这项内容( application.dispatcher.defaultRoute.controllerPrefer=true)也应该可以打到效果。

常用的命令_变量的赋值

在controller中利用下面语句传递参数到页面上:

$this->getView()->assign('rate_list', $rate_list);

然后在,vierw里面的页面里使用rate_list这个内容是哪个。

常用的命令_指明view

在 controller 的类的方法中也可指明需要加载的view。如下,在语句后面必须使用exit()退出,否则还会去寻找默认的view而引发错误。

$this->getView()->display('index/configindex.phtml');

常用的命令_注册本地类库

Yaf_Loader::getInstance()->registerLocalNameSpace(['User', 'Permission', 'Data' ... ... ]);

上面的意思是:注册本地类名前缀, 这部分类名将会在本地类库查找 里面的每个item可以对应一个.php文件,也可对应一个文件夹。

未完,待续。。。