前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Yaf---加载规则插件使用

Yaf---加载规则插件使用

作者头像
Marco爱吃红烧肉
发布于 2021-07-23 07:25:48
发布于 2021-07-23 07:25:48
74000
代码可运行
举报
文章被收录于专栏:无敌小笼包无敌小笼包
运行总次数:0
代码可运行

Yaf在自启动的时候, 会通过SPL注册一个自己的Autoloader, 出于性能的考虑, 对于框架相关的MVC类, Yaf Autoloader只以目录映射的方式尝试一次.

类型

后缀

映射路径

控制器

Controller

默认模块下为{项目路径}/controllers/, 否则为{项目路径}/modules/{模块名}/controllers/

数据模型

Model

{项目路径}/models/

插件

Plugin

{项目路径}/plugins/

一个简单的自我理解

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
class IndexController extends Yaf_Controller_Abstract {
    public function indexAction() {//默认Action

    $mod = new TserModel(); //自动加载model下面的test.php文件

    $mod->query(); //调用TestModel里的query方法

    $user = new UserPlugin(); //自动加载plugins下面的user.php文件

    $this->getView()->assign("title", "Hello Yaf");

    $this->getView()->assign("content", "Hello Yaf Content");
}

类的自动加载规则

而类的加载规则, 都是一样的: Yaf规定类名中必须包含路径信息, 也就是以下划线”_”分割的目录信息. Yaf将依照类名中的目录信息, 完成自动加载. 如下的例子, 在没有申明本地类的情况下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public function indexAction() {

  $upload = new upload_aliyun();

   //这个就会按下划线分割目录来寻找文件,所以他会寻找 \library\upload\aliyun.php
}

先这么简单理解,还有一个registerLocalNamespace的内容,后续再来说一说,怕混了。

手动载入

Yaf_Loader::import

导入一个PHP文件, 因为Yaf_Loader::import只是专注于一次包含, 所以要比传统的require_once性能好一些 示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制

    <?php
      //绝对路径
      Yaf_Loader::import(/usr/local/foo.php);
      //相对路径, 会在APPLICATION_PATH.”/library”下加载
      Yaf_loader::import(“plugins/User.php”);
    ?>

使用Boostrap

Bootstrap, 也叫做引导程序. 它是Yaf提供的一个全局配置的入口, 在Bootstrap中, 你可以做很多全局自定义的工作.

使用Bootstrap

在一个Yaf_Application被实例化之后, 运行(Yaf_Application::run)之前, 可选的我们可以运行Yaf_Application::bootstrap 改写index.php文件如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
define("APP_PATH", realpath(dirname(__FILE__)));

$app = new Yaf_Application(APP_PATH . "/conf/application.ini");

$app->bootstrap()->run();

当bootstrap被调用的时刻, Yaf_Application就会默认的在APPLICATION_PATH, 
寻找Bootstrap.php,而这个文件中, 必须定义一个Bootstrap类, 
而这个类也必须继承自Yaf_Bootstrap_Abstract.实例化成功之后, 
所有在Bootstrap类中定义的, 以_init开头的方法, 都会被依次调用, 
而这些方法都可以接受一个Yaf_Dispatcher实例作为参数.也可以通过在配置文件中修改application.bootstrap来变更Bootstrap类的位置.

简单的示例Bootstrap.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
  class Bootstrap extends Yaf_Bootstrap_Abstract {
    public function _initConfig(){
      $config = Yaf_Application::app()->getConfig();
      Yaf_Registry::set("config", $config);
    }
  public function _initDefaultName(Yaf_Dispatcher $dispatcher) {
   $dispatcher->setDefaultModule("Index")->setDefaultController("Index")->setDefaultAction("index");
   }
}

插件使用

Yaf支持用户定义插件来扩展Yaf的功能, 这些插件都是一些类. 它们都必须继承自Yaf_Plugin_Abstract. 插件要发挥功效, 也必须现实的在Yaf中进行注册, 然后在适当的实际, Yaf就会调用它.

Yaf 支持的Hook

名称

触发时机

说明

routerStartup

在路由之前触发

这个是7个事件中, 最早的一个. 但是一些全局自定的工作, 还是应该放在Bootstrap中去完成

routerShutdown

路由结束之后触发

此时路由一定正确完成, 否则这个事件不会触发

dispatchLoopStartup

分发循环开始之前被触发

preDispatch

分发之前触发

如果在一个请求处理过程中, 发生了forward, 则这个事件会被触发多次

postDispatch

分发结束之后触发

此时动作已经执行结束, 视图也已经渲染完成. 和preDispatch类似, 此事件也可能触发多次

dispatchLoopShutdown

分发循环结束之后触发

此时表示所有的业务逻辑都已经运行完成, 但是响应还没有发送

 定义插件 

插件类是用户编写的, 但是它需要继承自Yaf_Plugin_Abstract. 对于插件来说, 上一节提到的7个Hook, 它不需要全部关心, 它只需要在插件类中定义和上面事件同名的方法, 那么这个方法就会在该事件触发的时候被调用. 而插件方法, 可以接受俩个参数, Yaf_Request_Abstract实例和Yaf_Response_Abstract实例. 一个插件类 例子如下:

plugins/User.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
  class UserPlugin extends Yaf_Plugin_Abstract {
   public function routerStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $respons
  }
   public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $respo
  }
}

注册插件

插件要生效, 还需要向Yaf_Dispatcher注册, 那么一般的插件的注册都会放在Bootstra中进行. 一个注册插件的例子如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
  public function _initPlugin(Yaf_Dispatcher $dispatcher) 
  {
    $user = new UserPlugin();
    $dispatcher->registerPlugin($user);
  }
}

目录

一般的, 插件应该放置在APPLICATION_PATH下的plugins目录, 这样在自动加载的时候, 加载器通过类名,发现这是个插件类, 就会在这个目录下查找.当然, 插件也可以放在任何你想防止的地方, 只要你能把这个类加载进来就可以

获取参数

Yaf_Request_Http

代表了一个实际的Http请求, 一般的不用自己实例化它, Yaf_Application在run以后会自动根据当前请求实例它,在控制器内可以使用$this->getRequest()来获取请求信息。更多Yaf_Request_Http类的内容可参见文档:

http://www.laruence.com/manual/yaf.class.request.html#yaf.class.request.http

使用示例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
class IndexController extends Yaf_Controller_Abstract {

  public function indexAction($name='', $value='') {

   print_r($this->getRequest()->getQuery());
}

扩展 Yaf_Request_Http,比如加上过滤,数据处理等。先在library定义一个request的类,再在Bootstrap.php里设置Request 文件示例:library/Request.php

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract{
        public function _initRequest(Yaf_Dispatcher $dispatcher)
    {
      $dispatcher->setRequest(new Request());
    }
}

然后在控制器中可以使用$this->getRequest()->getQuery()来获取参数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
class IndexController extends Yaf_Controller_Abstract {
  public function indexAction() {
     print_r($this->getRequest()->getQuery());
}

关于更多的该类的使用方法,可以参考: http://www.laruence.com/manual/yaf.class.request.html

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-07-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
15 条评论
热度
最新
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
b64
b64
回复回复点赞举报
加载更多
推荐阅读
这可能是你见过最详细的PowerBI显示图片方法综述
当然,我们更希望的是能够根据数据表显示多张图片,比如制作产品销售情况可视化的时候,一边显示产品图片,一边显示销售数量。有两个常用的控件可以实现这个效果。一个是原生默认的表格控件,一个是第三方的CardBrowser控件。要显示图片,只需增加一个图片URL的字段即可。URL,通俗来讲就是网址。拖入表格之前,需要把该字段的属性设置为图片URL。如下图所示:
btharp
2021/08/31
4.8K0
【控件说明】--盘点PowerBI那些显示图片的控件
话说上回,我给大家开发了一款助于显示本地图片的压缩和转码工具。该工具干了2件事:首先是转码,将图片转为base64码,PowerBI(PBI)可以直接读取并显示成图片。另一件更为关键——解决了图片压缩问题,单纯的图片转码,往往会因为图片本身过大(几十k以上就过大了),导致PBI图片显示不全或干脆不显示。
btharp
2021/08/31
2.1K0
如何将本地图片在PowerBI中展示呢?
文件夹中有一些公司最近的照片,为了展示团队的风采,我准备把它们在PowerBI中用Simple image做成幻灯片,再用Play Axis自动播放。
陈学谦
2020/05/16
2.4K0
3.28 PowerBI报告可视化-Organization Chart:带图片的组织架构图(含Base64图片制作)
加入 PowerBI自己学 知识星球 可以:下载源文件,边学边练;遇到问题,提问交流,有问必答。
PowerBI自己学_轻松
2025/02/26
1390
3.28 PowerBI报告可视化-Organization Chart:带图片的组织架构图(含Base64图片制作)
Power BI 表格加载图片注意事项
jpg、png等常见格式的URL,SVG编码,本地照片转BASE64编码。URL通常表现为:
wujunmin
2025/02/10
860
Power BI 表格加载图片注意事项
[Qt] 基于 Qt 的文件选择与图片显示功能实现
在这篇博客中,我们将带领 Qt 的初学者一步步实现一个简单的图片选择与显示功能,并逐渐优化代码,从最基础的版本开始,逐步添加更多的功能。本文中使用了 Qt 中多个重要的类和函数,例如 QFileDialog、QSettings、QPixmap 等。文章为每个版本的实现进行详细讲解,帮助更好地理解 Qt 的使用。
DevKevin
2024/10/06
4820
Power BI批量导入本地图片最佳方式
Power BI擅长批量导入网络图片,本地图片总会遇到这样那样的问题。而批量导入本地图片又是一个刚需:
wujunmin
2021/09/07
2K0
Power BI批量导入本地图片最佳方式
图片转Base64工具2.0
3年前,我开发了一款批量压缩图片并转成base64文本的工具。转换的结果可用于Power BI直接读取,显示本地文件。详见这篇推文:
btharp
2023/09/01
4452
图片转Base64工具2.0
PowerBI 大型全自动图片库终极解决方案
经过实际测试,多达数百兆的图片资源,只需 20 秒不到,就可以全部加载到 Power BI 中供使用。
BI佐罗
2022/07/07
1.5K0
PowerBI 大型全自动图片库终极解决方案
vue如何动态加载本地图片
大家好,我是前端队长Daotin,想要获取更多前端精彩内容,关注我(全网同名),解锁前端成长新姿势。
Daotin
2021/07/28
4.3K0
【第3版emWin教程】第23章 emWin6.x的PNG图片显示
教程不断更新中:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429 第23章 emWin6.x的PNG图片显示 本期主要讲emW
Simon223
2021/07/08
6910
如何批量导入1000张缩略图到 PowerBI 做图片目录
但有的时候,我们不希望企业内部的图片暴露在网络中,最好可以内置在 Power BI 中,这可以实现吗?
BI佐罗
2022/07/07
1.5K0
如何批量导入1000张缩略图到 PowerBI 做图片目录
图片折腾的经历——文件批处理、爬虫、图片工具
这个工具使用很简单,应该稍微看一下就能上手使用了,可以采集某个视频作者的全部作品,包括图集,具体就不多介绍。
不愿意做鱼的小鲸鱼
2022/11/03
7530
图片折腾的经历——文件批处理、爬虫、图片工具
微信小程序——图片识别
课程大作业的目的是:运用在本次课程中学到的知识来指导实践,了解程序设计其实现方法,学会解决实际问题。掌握微信小程序设计的具体步骤与基本方法,针对选定的程序做调研分析。通过课程大作业,提高实践动手技能,培养独立分析分析问题和解决问题的能力。 课程大作业的要求:本次课程大作业的选题比较灵活,可以是自主选题,也可以参考课本中的案例自行修改完善,题目要符合课程大作业的要求,并且具备一定的水平和深度。
全栈程序员站长
2022/09/07
5.5K0
Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
今天我的这篇文章使用的是LruCache这个类(之前写了一篇使用LruCache加载网络图片的Android 异步加载图片,使用LruCache和SD卡或手机缓存,效果非常的流畅)以及对图片进行相对应的裁剪,这样也可以尽量的避免OOM的发生,我们先看下微信的效果吧
Java架构师必看
2021/05/21
3.7K0
Android 使用ContentProvider扫描手机中的图片,仿微信显示本地图片效果
解决java中html转word文档,转成功后的word文档在断网情况下无法显示图片问题「建议收藏」
前一段时间遇到一个问题,就是将html转成word文档,里面有图片,表格,和各种形式的文字。刚开始的做法是将html代码取出来,然后以留的形式进行保存,后缀名为.doc。当我转成之后发现一切完美,但是图片出现了问题:
全栈程序员站长
2022/11/07
5.9K0
解决java中html转word文档,转成功后的word文档在断网情况下无法显示图片问题「建议收藏」
nginx解决图片显示过慢,或者不显示
经过一系列的排查(中间过程我就省略了,直接写重点了!),最终定位到是Nginx的问题。当我打开这位读者的网站后台管理系统,发现图片显示非常慢,在Nginx前端代理上查出如下错误信息。
DencyCheng
2023/02/16
4.8K0
Pyinstaller打包exe附带图片的方法
在最近的wordpress项目中学到了图片字节码可在文件中存在,于是我做了试验并成功了(就是代码里带一堆字节码……)
全栈程序员站长
2022/07/02
2.8K0
Pyinstaller打包exe附带图片的方法
【文末赠书】个人永久性免费-Excel催化剂功能第121波-文件处理新增base64转码及导出文本文件
在Excel催化剂现存在100+功能中,零散分布了大量的文件类操作,在Excel催化剂倡导的搜索+笔记的方式下使用插件,无需死记硬背,真正到使用时,对功能文档及功能菜单进行搜索即可。
Excel催化剂
2021/08/19
1.5K0
【文末赠书】个人永久性免费-Excel催化剂功能第121波-文件处理新增base64转码及导出文本文件
Excel催化剂功能第11波-快速批量插入图片并保留纵横比
原文在简书上发表,再同步到Excel催化剂微信公众号或其他平台上,文章后续有修改和更新将在简书上操作, 其他平台不作同步修改更新,因此建议阅读其他出处的文章时,尽可能跳转回简书平台上查看。
Excel催化剂
2021/08/19
1.3K0
推荐阅读
相关推荐
这可能是你见过最详细的PowerBI显示图片方法综述
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档