设为首页 收藏本站
查看: 404|回复: 0

[经验分享] PHP 框架 Yaf 学习笔记----默认行为

[复制链接]

尚未签到

发表于 2017-3-31 06:56:55 | 显示全部楼层 |阅读模式
  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 的必须配置,其实就是个目录设定

yaf.directory=APP_PATH
application.directory=APP_PATH

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

 
  2.Yaf 有一套完整的目录组织,文件命名规则
所有Yaf应用都应该遵循下面的目录组织结构

- index.php //入口文件
- .htaccess //重写规则   
+ conf
|- application.ini //配置文件   
application/
+ controllers
- Index.php //默认控制器
+ views   
|+ index   //控制器
- index.phtml //默认视图
+ modules //其他模块
- library
- models  //model目录
- 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 里

class ErrorController extends Yaf_Controller_Abstract {...}
当然错误控制器是否生效受配置影响

application.dispatcher.throwException=1
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  [[size=1em]product]默认匹配设置
Yaf在匹配配置文件的节(section)的时候,不是对名称完全匹配,比如配置里面有

[product]
...

new Yaf_Application("conf/app.ini",'p')//如果没有p,[product] 依然有效 
  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的方式对请求进行处理,要达到嵌套处理的效果,需要自己实现代码.流程对应说明


mainloopstart
dispatchLoopStartup
preDispatch//其实是个循环受forward控制
这之间request不能发送改变,可以forward但是会被延期执行
postDispatch
forward的request延期执行,循环到preDispatch
dispatchLoopShutdown
可以dispatch一个新的request,会开始新的dispatchLoopStartup
mainloopend

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-357818-1-1.html 上篇帖子: php取服务器当前时间(china) 下篇帖子: 一个php运算符优先级问题
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表