文档章节

PHP 框架 Yaf 学习

 老查
发布于 2014/10/08 14:20
字数 1118
阅读 109
收藏 0

Yaf是一个C语言编写的PHP框架,以php扩展的形式. 是 laruence(鸟哥)  的作品

 

laruence 是PHP 开发组成员, PECL 开发者. Yaf, Taint等Pecl扩展作者.

 

Yaf 相关文章 http://www.laruence.com/tag/yaf    在线手册

 

在线手册系统完整的阐述了Yaf的一切,这里作为学习导读,列出Yaf的默认行为(契约)

 

0.Yaf 配置文件(php.ini风格)

其实分两部分,一个是php.ini中的配置 "yaf." 开头,这部分通常是不用调整的。

另一部分是Yaf_Application初始化时刻的配置 "application." 开头

 

配置可以引入php常量定义

 

1.Yaf 的必须配置,其实就是个目录设定

Ini代码  收藏代码

  1. yaf.directory=APP_PATH  

  2. application.directory=APP_PATH  

也就是 appliction 脚本目录,至少要定义一个,application.directory优先

 

2.Yaf 有一套完整的目录组织,文件命名规则

所有Yaf应用都应该遵循下面的目录组织结构

Text代码  收藏代码

  1. - index.php //入口文件  

  2. - .htaccess //重写规则      

  3. + conf  

  4.   |- application.ini //配置文件     

  5. application/  

  6.   + controllers  

  7.      - Index.php //默认控制器  

  8.   + views      

  9.      |+ index   //控制器  

  10.         - index.phtml //默认视图  

  11.   + modules //其他模块  

  12.   - library  

  13.   - models  //model目录  

  14.   - plugins //插件目录  

 

Yaf支持大小写敏感和不敏感两种方式,但是我没有找到大小写敏感的用法(linux环境)
类命名和搜索规则
类名称             对应目录
ClassModel      models
ClassPlugin      plugins
ClassController controllers
其他                library

 

3.Yaf 是通过以包含分隔符"_"的类名称配合目录组织,和完整的类命名规则完成类加载管理

比如以前你有一个Bar类文件Bar.php,如果用到Yaf里,并自动加载,那么就要这样组织

把Bar.php放到library目录下的一个子目录里面,比如 myclass

并且要更改Bar.php里面的类名(一般都是Bar的)为MyClass_Bar

也就是说类名必须包含目录名 具体解释

 

4.错误处理

Yaf里面错误处理可以通过一个控制器完成,声明在 APP_PATH/controllers/Error.php 里

Php代码  收藏代码

  1. class ErrorController extends Yaf_Controller_Abstract {...}   

当然错误控制器是否生效受配置影响

Text代码  收藏代码

  1. application.dispatcher.throwException=1  

  2. application.dispatcher.catchException=1  

具体看 官方提供的例子

 

5.视图view

render视图需要指定视图模板文件,可以用相对(application/views)路径或者绝对路径

 

6.路由

Yaf提供了多种级别的路径支持,正则路由也有支持,你可以用配置文件写路由,或者在Bootstrap.php里面用php脚本写路由

 

个人认为Yaf最吸引人的地方是:

PHP Framework in PHP extension,如果没有数据库访问的瓶颈造成的木桶效应,Yaf这种形式是最优的

使用Yaf后在某种级别的应用中内存占用应该降低很多

 

7.BUG?发现如下问题,不知道是否是bug  [product]默认匹配设置

Yaf在匹配配置文件的节(section)的时候,不是对名称完全匹配,比如配置里面有

Ini代码  收藏代码

  1. [product]  

  2. ...  

Php代码  收藏代码

  1. new Yaf_Application("conf/app.ini",'p')//如果没有p,[product] 依然有效<span style="font-size: small;"> </span>  

8.MVC

Yaf和大多数框架一样提供了一个默认的MVC行为,对于M(setDefaultModule)我没有找到更改生效的方法。
C和V是一一对应的,当然可以名称不同,可以通过Yaf_Dispatcher的setView方法进行设置。

 

9.单例模式类,Yaf中

Yaf_Application
Yaf_Loader
Yaf_Dispatcher
Yaf_Registry
Yaf_Session
类实例
 是单例,其他不是
需要注意如果在Yaf_Controller_Abstract继承类action中使用了forward,那将会产生新的实例对象。

 

10.非嵌套Dispatcher(2.x版本以下)

Yaf对请求的处理是非嵌套的,这意味着所有对 Controller转移都是非嵌套的,如果一个Controller没有执行完,发生了转移,那有可能发生不可知的结果甚至错误,Yaf提供的 forward是等待当前Controller执行完毕才处理的,因此如果完全按照MVC的方式对请求进行处理,要达到嵌套处理的效果,需要自己实现代码.流程对应说明

Text代码  收藏代码

  1. mainloopstart  

  2.   dispatchLoopStartup  

  3.      preDispatch//其实是个循环受forward控制  

  4.           这之间request不能发送改变,可以forward但是会被延期执行  

  5.      postDispatch  

  6.      forward的request延期执行,循环到preDispatch  

  7.   dispatchLoopShutdown  

  8.   可以dispatch一个新的request,会开始新的dispatchLoopStartup  

  9. mainloopend  

 


本文转载自:http://achun.iteye.com/blog/1473126

粉丝 2
博文 81
码字总数 21027
作品 0
长宁
架构师
私信 提问
Yaf零基础学习总结5-Yaf类的自动加载

Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件。 Yaf在自...

开元中国2015
2015/04/17
1K
0
yaf 学习

yaf 学习 C扩展的php框架Yaf采用自动加载机制,如果你的类库不符合yaf的标准,请将你的中的设置为1, 使用,在中提供整个项目的启动配置,可以将很多自定义的方法放到里面 使用bootstap yaf 使用...

eatnothing
2016/08/04
69
0
phalcon-入门篇1(基本介绍与环境搭建)

本教程基于phalcon2.0.9版本 *先在这里感谢各位phalcon技术爱好者,我们提供这样一个优秀的交流平台 * 离结束了PhalApi教程之后一个多月,我喵了个咪又回来了,这次为大家带来的教程是一款国外的...

喵了_个咪
2016/01/24
877
2
PHP-Yaf执行流程-源码分析

介绍 Yaf框架是一个c语言编写的PHP框架,是一个以PHP扩展形式提供的PHP开发框架,相比于一般的PHP框架, 它更快,更轻便,内存占用率更低,就是本着对性能的追求,Yaf把框架中不易变的部分抽...

简单方式
2017/02/08
0
0
php yaf框架的默认控制器为什么会多次请求?

本人yaf新手,有点时间,想学习下yaf框架,遇到这个问题,请知道的朋友指点下,谢谢。 默认的控制器是index,代码如下: 又新建了一个控制器,代码如下: 浏览器中访问 /test/index,得到的日...

godslife
2016/08/01
670
4

没有更多内容

加载失败,请刷新页面

加载更多

浅析大数据 学习大数据后能做什么

大数据时代的到来使得大数据开发人才迎来了前所未有的机遇和挑战!一个绝佳的入行机会摆在了众人面前!于是,很多人都在打听,大数据到底有何应用?可以用来做什么?好程序员今天就为大家作出...

好程序员IT
15分钟前
1
0
C# USB视频人脸检测

此程序基于 虹软人脸识别进行的开发 SDK下载地址:https://ai.arcsoft.com.cn/ucenter/user/reg?utm_source=csdn1&utm_medium=referral 前提条件 从虹软官网下载获取ArcFace引擎应用开发包,...

是哇兴哥棒棒哒
26分钟前
2
0
Vagrant虚拟机硬盘扩容

# 停止虚拟机vagrant halt <machine_name># 进入VirtualBox VMs目录,查看并记录原磁盘uuid,留作后用vboxmanage showhdinfo box-disk1.vmdk# 克隆磁盘,vmdk格式无法调整大小,需要...

sskill
28分钟前
1
0
分布式商业萌芽,银行迎来发展新机遇

01 分布式商业萌芽,银行迎来发展新机遇 金融界:近几年区块链的热度经历了过山车般的转折。目前追逐区块链的资本也开始冷静下来,于此同时,各大商业银行对区块链的研究应用也越来越多。您认...

Java领航员
34分钟前
2
0
Spring系列教程六: Spring jdbcTemplate在Dao中的使用

概念 Spring中的jdbcTemplate的主要作用是实现数据的交互,下面我们就在dao层中如何使用jdbctemplate写测试案例 项目目录如下 基于xml实现jdbctemplate 这里我们使用的是JdbcDaoSupport这个类...

我叫小糖主
37分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部