yaf 整理札记
由于yaf只是一个web框架,只负责处理web请求之类的基本功能,相当简洁,连db库都没有。于是试着把zend 2.2的db库,form库,validator库与yaf结合,写了一个demo。因为zend 2.2框架的命名空间跟yaf一样,所以用起来相当方便。
下面是demo的文件架构,参照yaf手册建立的,是一个标准的架构:
├── application
│ ├── Bootstrap.php
│ ├── controllers
│ │ ├── Album.php
│ │ ├── Application.php
│ │ ├── Blogs.php
│ │ ├── Device.php
│ │ ├── Error.php
│ │ ├── Index.php
│ │ └── Product.php
│ ├── library
│ │ ├── Album
│ │ │ ├── Filter
│ │ │ │ └── Album.php
│ │ │ └── Form
│ │ │ └── AlbumForm.php
│ │ ├── lYaf
│ │ │ └── Layout.php
│ │ └── Zend
│ │ ├── Db(下面的都是文件夹)
│ │ ├── Form
│ │ ├── InputFilter
│ │ ├── ServiceManager
│ │ ├── Stdlib
│ │ └── Validator
│ ── models
│ │ └── Device.php
│ ├── modules
│ │ └── Mod
│ │ ├── controllers
│ │ │ ├── Ctrl.php
│ │ │ └── Index.php
│ │ └── views
│ │ ├── ctrl
│ │ │ └── index.phtml
│ │ ├── index
│ │ │ └── index.phtml
│ │ └── index.phtml
│ └── views
│ ├── album
│ │ ├── add.phtml
│ │ └── index.phtml
│ ├── blogs
│ │ └── index.phtml
│ ├── device
│ │ ├── index.phtml
│ │ └── list.phtml
│ ├── error
│ │ └── error.phtml
│ ├── index
│ │ ├── form.phtml
│ │ ├── index.phtml
│ │ └── list.phtml
│ ├── layouts
│ │ └── frontend.phtml
│ ├── product
│ │ └── info.html
│ └── report
│ └── index.phtml
├── conf
│ ├── application.ini
├─ public
├── css
├── font
├── img
├── index.php
└── js
接下来看看配置文件
[common]
application.directory = APP_PATH "/application"
application.dispatcher.catchException =
application.dispatcher.throwException =
application.view.ext = 'phtml'
application.layout.directory=APP_PATH "/application" "/views" "/layouts"
;application.layoutpath = APP_PATH "/application/views"
application.document = "layout.phtml" ;app
application.baseUri = '' ;not used
application.dispatcher.defaultModule = index
application.dispatcher.defaultController = index
application.dispatcher.defaultAction = index
application.modules = Index,Mod
[product : common] ;database 数据库链接设置
database.params.driver = "pdo_mysql"
database.params.database = "data"
database.params.username = "username"
database.params.password = "pwd"
database.params.hostname = "127.0.0.1"
database.params.port =
database.params.charset = "UTF8"
database.params.driver_options. = "SET NAMES utf8" routes.user.type = "regex"
routes.user.match = "#^/$#"
routes.user.route.module = Mod
routes.user.route.controller = Ctrl
routes.user.route.action = index
routes.user.map. = name
routes.user.map. = value
yaf不可缺少的配置项:application.directory = APP_PATH "/application" 建议把
application.dispatcher.catchException =
application.dispatcher.throwException =
放在[product : common]外面,因为[product : common]里面的是生产环境。注意这一句:
application.modules = Index,Mod
modules要注意顺序,而且名字要与modules下面的文件夹名字一致,包括大小写。在数据库配置方面,有一个很重要的设置项:
database.params.charset = "UTF8"
database.params.driver_options. = "SET NAMES utf8"
如果不设置database.params.driver_options.1002 = "SET NAMES utf8",从数据库取出来的中文会变成乱码。
配置文件与Bootstrap.php文件紧密结合,那么再来看Bootstrap.php文件:
<?php
use lYaf\Layout;
/**
* 所有在Bootstrap类中, 以_init开头的方法, 都会被Yaf调用,
* 这些方法, 都接受一个参数:Yaf_Dispatcher $dispatcher
* 调用的次序, 和申明的次序相同
*/
class Bootstrap extends Yaf\Bootstrap_Abstract { private $_config; public function _initConfig() {
$this->_config = Yaf\Application::app()->getConfig();
Yaf\Registry::set("config", $this->_config);
} public function _initDefaultName(Yaf\Dispatcher $dispatcher) {
$dispatcher->setDefaultModule("Index")->setDefaultController("Index")->setDefaultAction("index"); } /**
* 设置页面layout
*/
public function _initLayout(Yaf\Dispatcher $dispatcher){ $layout = new Layout($this->_config->application->layout->directory);
$dispatcher->setView($layout);
} public function _initNamespaces(){
//申明, 凡是以Zend,Local开头的类, 都是本地类
Yaf\Loader::getInstance()->registerLocalNameSpace(array("Zend", "Local"));
} public function _initRoute(Yaf\Dispatcher $dispatcher) {
//在这里注册自己的路由协议,默认使用简单路由 通过派遣器获取默认的路由器
$router = Yaf\Dispatcher::getInstance()->getRouter();//获取路由器
$router->addConfig($this->_config->routes);//加载路由协议
}
/**
* 连接数据库,设置数据库适配器
*/
public function _initDefaultDbAdapter(){
$dbAdapter = new Zend\Db\Adapter\Adapter(
$this->_config->database->params->toArray()
); Yaf\Registry::set("adapter", $dbAdapter);
} }
我已经在这个文件中写了注释,在这里就不一一解释了。因为我开启了命名空间,所以整个demo都充满着反斜杠,虽然看起来别扭,但使用起来很方便。在这个Bootstrap.php文件中,使用了一个老外写的Layout库,写得很全面。
从zend 2.2引进来的库都比较简单,比1.2的版本小多了,很容易使用。这些引用来的模块和自定义的模块(其实引入来的也就是自定义的)都要根据配置,放在相应的目录下面。在写这些自定义模块类时,建议使用yaf的命名空间,提高效率的同时也使代码简洁了很多。
默认的module,它的controllers和views就是/application/controllers/和/application/views,而其他module,它们的controllers和views就在它们目录下面:/modules/Mod/controllers/,/modules/Mod/views/。
yaf 整理札记的更多相关文章
- php框架Yaf路由重写
php框架Yaf路由重写 通常为了友好的URL格式,会进行站点URL的重写,可以在webserver(Nginx)的配置中进行rewrite,也可在在程序端进行 以下使用Yaf框架进行URL的重写,进 ...
- SQL菜鸟学习札记(二)
五月份一直在写SQL,之后写了一个期末大作业的项目,现在才有时间把之前遇到的各种奇怪的问题整理出来.下一部分札记应该是大作业中使用到的SQL的整理. 一.UPDATE SET语句后面可以并列赋值. 之 ...
- Java面试札记
Java面试札记 在最深的夜里,即使是你的影子也会离你而去. 背景:愿某人在中秋节之前吃上大厂月饼!!!@CDZ 1.Java的八种基本数据类型? 整型:byte.int.short.long: 浮 ...
- Linux CentOS 配置Yaf框架
简介 Yaf框架想必大家都有所了解,它是一个开源的高性能的PHP框架 官网地址:https://www.php.net/manual/zh/book.yaf.php Yaf开发文档:https://w ...
- dotNET跨平台相关文档整理
一直在从事C#开发的相关技术工作,从C# 1.0一路用到现在的C# 6.0, 通常情况下被局限于Windows平台,Mono项目把我们C#程序带到了Windows之外的平台,在工作之余花了很多时间在M ...
- UWP学习目录整理
UWP学习目录整理 0x00 可以忽略的废话 10月6号靠着半听半猜和文字直播的补充看完了微软的秋季新品发布会,信仰充值成功,对UWP的开发十分感兴趣,打算后面找时间学习一下.谁想到学习的欲望越来越强 ...
- SQL Server 常用内置函数(built-in)持续整理
本文用于收集在运维中经常使用的系统内置函数,持续整理中 一,常用Metadata函数 1,查看数据库的ID和Name db_id(‘DB Name’),db_name('DB ID') 2,查看对象的 ...
- kafka学习笔记:知识点整理
一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...
- JAVA程序员常用软件整理下载
********为了大家学习方便,特意整理软件下载如下:*************Java类软件:-------------------------------JDK7.0:http://pan.ba ...
随机推荐
- POJ1061:青蛙的约会+POJ2115C Looooops+UVA10673Play with Floor and Ceil(扩展欧几里得)
http://poj.org/problem?id=1061 第一遍的写法: #include <iostream> #include <stdio.h> #include & ...
- 从getApplicationContext和getApplication再次梳理Android的Application正确用法
原文地址http://blog.csdn.net/ly502541243/article/details/52105466 原文地址http://blog.csdn.net/ly502541243/a ...
- JDBC NOTE
JDBC 基本流程: 1. 加载驱动 a. SQLSERVER:Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver&quo ...
- 2017 ACM/ICPC Asia Regional Qingdao Online Solution
A : Apple 题意:给出三个点,以及另一个点,求最后一个点是否在三个点的外接圆里面,如果在或者在边界上,输出“Rejected”,否则输出"Accepted" 思路:先求一个 ...
- BabelMap 10.0.0.3 汉化版已经发布
新的 BabelMap 在日前发布. 新版本增加了字符书签的管理功能,以及将窗口最小化到系统通知栏(时钟区域)的功能. 请点击主页左上角进入下载页面下载.
- 【android】如何让WebView对Video标签的支持更强力
先说结论:各个产商对HTML5特性支持的程度不一样,用默认的WebChromeClient不能普遍适用. 因此咱基于GITHUB上一个VideoEnabledWebView库做了自己的封装,在魅族.华 ...
- HTTP从入门到入土(3)——TCP三次握手
TCP三次握手 客户端与服务器之间互相发送HTTP请求响应之前需要先进行TCP连接,因为HTTP是一个无连接.无状态协议,不存在连接的概念,只有请求和响应的概念.而请求和响应实际上只是数据包,他们需要 ...
- INNODB锁(2)
在上一篇文章写了锁的基本概述以及行锁的三种形式,这一篇的主要内容如下: 一致性非锁定读 自增长与锁 外键和锁 一致性性非锁定读 一致性非锁定读是InnoDB通过多版本并发控制(MVCC,multi v ...
- 关于Redis命令keys在性能方面的说明
redis的keys命令类似于Mysql的like命令,无非就是模糊匹配相近的字符数据. KEYS 的速度非常快,但在一个大的数据库中使用它仍然可能造成性能问题,如果你需要从一个数据集中查找特定的 k ...
- 图像添加logo水印函数
<?php //图像添加水印函数 /** *为一张图片添加上一个logo水印(以保存新图片的方式实现) *@param string $picname 被缩放的处理图片源 *@param int ...