yaf学习总结.docx

上传人:ylj18****70940 文档编号:44252679 上传时间:2022-09-20 格式:DOCX 页数:17 大小:16.98KB
返回 下载 相关 举报
yaf学习总结.docx_第1页
第1页 / 共17页
yaf学习总结.docx_第2页
第2页 / 共17页
点击查看更多>>
资源描述

《yaf学习总结.docx》由会员分享,可在线阅读,更多相关《yaf学习总结.docx(17页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、yaf学习总结1 1- - 231- - 26 学习 f yaf 框架并整合 o medoo 数据库操作medoo 手册:https/medoo.in/doc 当前环境:Windows + Apache + MySQL + PHP 后期环境:Linux + nginx + MySQL + PHP 一、yaf 初学 yaf 是一个基于 c 书写的 php 扩展的框架 优点:1.用 C 语言开发的 PHP 框架, 相比原生的 PHP, 几乎不会带来额外的性能开销. 2. 全部的框架类, 不须要编译, 在 PHP 启动的时候加载, 并常驻内存. 3. 更短的内存周转周期, 提高内存利用率, 降低内存

2、占用率. 4. 灵活的自动加载. 支持全局和局部两种加载规则, 便利类库共享. 5. 高性能的视图引擎. 6. 高度敏捷可扩展的框架, 支持自定义视图引擎, 支持插件, 支持自定义路由等等. 7. 内建多种路由, 可以兼容目前常见的各种路由协议. 8. 强大而又高度敏捷的配置文件支持. 并支持缓存配置文件, 避开困难的配置结构带来的性能损失. 9. 在框架本身,对危急的操作习惯做了禁止. 10.更快的执行速度, 更少的内存占用.留意:1. 将 yaf 扩展下载安装,并且开启扩展,进行文件书目的搭建,就可以运用此框架二、yaf 的文件结构及流程图 实现一个小 demo 入口文件->重写规则

3、->配置文件->限制器->视图 留意:在 nginx 上配置重写规则的时候,依据手册上面的书写是无法实现的三、yaf 的路由规则 默认的访问是 application/controllers/index.php 中的 indexController 中得 indexAction’方法 访问方式:1.干脆输入域名domain 2.也可以是domain/index/index Yaf 的默认路由是 Router ,但是是运用路由协议对 URL 进行分发的,它接收的恳求对象是 Yaf_Request_Http,当你运用命名空间的时候就编程 YafRequest_http

4、 。默认的路由协议有如下几条: Yaf_Route_Simple Yaf_Route_Supervar Yaf_Route_Static Yaf_Route_Map Yaf_Route_Rewrite Yaf_Route_Regex 当你没定义运用路由协议的时候,默认路由协议是 Yaf_Route_Static 。而且路由是有加载依次的,假如匹配上第一条就不向下匹配了,大家这点要留意哦。1. 默认协议路由默认路由的匹配模式是这样如下这样的:/:modules/:controller:/:action/:params 会根据上边的依次匹配,但是这里有一点留意的,当你访问 /admin/index

5、/index 会解析成如下这样 array( module => admin, controller => index, action => index, ) 但是,假如是 /admin/index 缺少了 Action 参数,系统会先推断 Action,所以它就把 admin 推断成了 Controller,index 推断成了 Action ,这就是为什么你定义了路由但是它显示不对的缘由四 、yaf 中 其他 模块的配置 运用 书目结构:modulesAdmin controllersUser.php /限制器 viewsuseruserList.phtmlHome 当前

6、需求为:新加 Home 和 Admin 模块,配置步骤如下:第一步:首先修改 conf/conf.ini,在common配置段下添加如下配置 application.modules = Index,Home,Admin 留意:手册中说肯定要定义 Index Module ,假如不定义 Index 模块,在访问原有的默认模块时会报错 There is no module Index其次步:在 application 书目下新建 modules 书目,用来存放模块,然后在modules 书目下创建 Admin 和 Home 书目,分别在 Admin 和 Home 书目下创建controllers

7、书目用来存放对应模块的限制器 比如:创建完书目,在 application/modules/Admin /controllers 下创建一个User.php,然后在 User.php 文件里定义一个 User 限制器 class UserController extends Yaf_Controller_Abstract public function userListAction() echo 111; return false; 这时我们用 /User/test 就可访问该 Home 模块下的User 限制器下的 testAction 方法。通过上面,也可以看出 Yaf 的限制器和方法的定

8、义方法,为什么要在方法中return false 呢,是因为 Yaf 默认会去加载视图,return false 是为了不让它自动加载视图。五、yaf+medoo 实现简洁的增删改查 首尔配置全局的 library 书目,在配置文件 conf.ini 中添加配置application.library = APPLICATION_PATH /library将 medoo 类文件放在根书目/library/db 下留意:类名的命名规范 db_medoo,这样才能保证在全局能够访问到 db_medoo,否则在实例化的时候就会出现类找不见的状况 1 1 模型UserModel<?phpclass

9、 UserModel protected $_medoo; public function _construct() /实例化 db_medoo,连接数据库 $this->_medoo = new db_Medoo ( / 必写配置 database_type => mysql, database_name => yihaoche_test, server => 127.0.0.1, username => root, password => root, /可选配置 charset => utf8, /设置字符集 ); /* 添加一条数据* retur

10、n当前插入记录的 id*/ public function insertTest($data) $this->_medoo->insert(user,$data); $user_id = $this->_medoo->id(); /调用 medoo 中的 id()返回当前最新的 id return $user_id; /* 依据 id 对某一条记录进行更新* return PDOStatement 对象*/ public function updateTest($id,$data) $result = $this->_medoo->update(user,$

11、data,id= => $id); return $result; /* 依据 id 删除某一条数据* return PDOStatement 对象*/ public function deleteTest($id) $result = $this->_medoo->delete(user,id= => $id); return $result; /* 简洁查询*/ public function selectTest() $result = $this->_medoo->select(user, id, name, age, email , id>=

12、 => 1 ); return $result; 2 2 限制器UserController<?php/* 用户模块*/ class UserController extends Yaf_Controller_Abstract/* liyijie* 实例化 userModel* 用于测试,连接的是 user 表*/ protected $_user; public function init() $this->_user = new UserModel(); /* 添加一条数据* post:* param $name,$age,$email* return 当前插入的记录的

13、id*/ public function insertAction() $data = $this->getRequest()->getPost(); suc($this->_user->insertTest($data); /* 依据 id 更新某一条数据* get:* param $id* post:* param $id,$name,$age,$email*/ public function updateAction() if($_SERVERREQUEST_METHOD=POST) $data = $this->getRequest()->getPo

14、st(); /$data = /age+ => 1, /年龄加 1 /; suc($this->_user->updateTest($dataid,$data); else $id = $_GETid; $data = $this->_user->selectOneTest($id); $this->getView()->assign(data => $data0); /* 依据 id 删除某一条数据* param $id*/ public function deleteAction() $id = $_GETid; suc($this->

15、_user->deleteTest($id); /* 查询获得数据*/ public function getInfoAction() suc( $this->_user->selectTest(); 3 3 在 p Bootstrap.php 中配置全局的设置 留意:在此文件中的只要是以 _init为前缀的方法都会自动执行,留意方法的依次 3.1 关闭视图的自动渲染 yaf 中只要在限制器中书写了方法,就会自动的去找寻对应的视图。假如想要关闭此功能有两种方式:第一, 在方法中干脆 return false ; 其次, 在 Bootstrap.php 中配置 <?php

16、class Bootstrap extends Yaf_Bootstrap_Abstract /* 关闭视图的自动渲染*/ public function _initCloseRender() Yaf_Dispatcher: getInstance ()->autoRender( false); 3.2 加载全局公共的方法在 application 下创建 common/function.php,然后在 Bootstrap.php 中进行自动加载 <?phpclass Bootstrap extends Yaf_Bootstrap_Abstract /* 加载全局公共函数*/ pu

17、blic function _initCommonFunctions() Yaf_Loader: import (Yaf_Application: app ()->getConfig()->application ->directory . /common/functions.php); 六、yaf 中的插件 Yaf 的 Hook触发依次 名称 触发时机 说明 1 routerStartup 在路由之前触发 这个是 7 个事务中, 最早的一个. 但是一些全局自定的工作, 还是应当放在 Bootstrap 中去完成 2 routerShutdown 路由结束之后触发 此时路由肯

18、定正确完成, 否则这个事务不会触发 3 dispatchLoopStartup 分发循环起先之前被触发 4 preDispatch 分发之前触发 假如在一个恳求处理过程中, 发生了 forward, 则这个事务会被触发多次 5 postDispatch 分发结束之后触发 此时动作已经执行结束, 视图也已经渲染完成. 和preDispatch 类似, 此事务也可能触发多次 6 dispatchLoopShutdown 分发循环结束之后触发 此时表示全部的业务逻辑都已经运行完成, 但是响应还没有发送1. 定义插件位置是 APPLICATION_PATH/application/plugins/Us

19、er.php<?php/* name SamplePlugin* desc Yaf 定义了如下的 6 个 Hook,插件之间的执行依次是先进先 Call* see - plugin- - abstract.php*/ class UserPlugin extends Yaf_Plugin_Abstract /* 在路由之前执行,这个钩子里,你可以做 url 重写等功能 */public function routerStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) echo <br /&g

20、t;routerStartup-在路由之前执行<br />/* 路由完成后,在这个钩子里,你可以做登陆检测等功能*/public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) echo <br />routerShutdown-路由完成后<br />/* 循环调度起先*/public function dispatchLoopStartup(Yaf_Request_Abstract $request, Yaf_Response_A

21、bstract $response) echo <br />dispatchLoopStartup-循环调度起先<br />/* 单个循环调度起先*/public function preDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) echo <br />preDispatch-单个循环调度起先<br />/* 单个循环调度结束*/public function postDispatch(Yaf_Request_Abstract $request,

22、 Yaf_Response_Abstract $response) echo <br />postDispatch-单个循环调度结束<br />/* 循环调度结束*/public function dispatchLoopShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) echo <br />dispatchLoopShutdown-循环调度结束<br /> 2. 注册插件 在 APPLICATION_PATH/application/BootStra

23、p.php 中注册插件 <?phpclass Bootstrap extends Yaf_Bootstrap_Abstract/* 注册插件*/ public function _initPlugins(Yaf_Dispatcher $dispatcher) $user = new UserPlugin(); $dispatcher->registerPlugin($user); 七、一些留意事项和遇到的问题 1.POST 变量是只读的 2. 路由注册的依次很重要, 最终注册的路由协议, 最先尝试路由 3. Yaf 中的限制器中是不允许书写构造方法,但是有一个 init()方法,与构造方法的作用是一样的 4. 在入口文件中加载 Bootstrap 必需是在 run 之前 5. 在运用 library 下的文件时,留意要在配置中的路径要书写正确,并且类名的命名要符合规范(在 yaf 中是运用下划线_’来分割书目的,会自动转换成/’),否则无法访问到

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 应用文书 > 工作计划

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com