php yaf框架模块化,YAF框架组成部分

一、架构总览

YAF是经典的MVC架构,主要组件如下:

(1)应用

YAF系统架构与生命周期的对象,由系统类Yaf_Application(启用命名空间的情况下是Yaf\Application)类完成,在入口文件中被初始化并被启动,在应用中可以使用Yaf_Application::app()(启用命名空间的情况下是Yaf\Application::app())来引用该对象

(2)模块

一个典型的应用是由多个模块组成的,这些模块通常都是应用目录下面的一个子目录,每个模块都自己独立的配置文件、公共文件和类库文件。模块可以功能分组。

(3)控制器

应用的调度层。每个模块拥有独立的MVC类库及配置文件,一个模块下面有多个控制器负责响应请求,而每个控制器其实就是一个独立的控制器类。

控制器主要负责请求的接收,并调用相关的模型处理,并最终通过视图输出或直接输出。严格来说,控制器不应该过多的介入业务逻辑处理。

(4)操作

一个控制器包含多个操作(方法),操作方法是一个URL访问的最小单元。在YAF中只有带Action后缀的方法才会对外部访问者开发。在YAF中还可以定义一个Action类处理某个操作。

(5)模型

应用的数据逻辑层。YAF框架中并没有自带数据库操作的类,我们可以自己封装相关DB操作,如使用PHP自带的PDO来对模型进行封装。

(6)视图

应用展示层。YAF框架自带了一个类似原生的视图,当然也可以集成第三方模板引擎如Smarty、Mustache等

(7)插件

通过内置的钩子工具可以实现在相应的执行阶段注册相关插件。

二、模块设计

1、模块目录结构

模块放置于应用的application\modules下面,其结构与application一样

如,新建一个config目录,表示后台配置模块,其结构如下:

197ba584063ff34d43d517479dc90611.png

2、模块配置

在application.ini中定义模块:

application.modules="Index,Config,System"

application.dispatcher.defaultModule=Index

注:上面定义了Index,Config,System三个模块,默认模块为Index

3、模块的使用

如新建一个模块Config:

(1)新建一个控制器文件Test.php

(文件路径:application/modules/Config/controllers/Test.php),内容如下:

classTestControllerextendsYaf\Controller_Abstract

{

publicfunctionhelloAction()

{

$this->getView()->assign('page','hello');

}

}

(2)新建一个视图文件hello.phtml

(文件路径:application/modules/Config/views/hello.phtml),内容如下:

(3)在浏览器中访问

http://{{ip:port}}/{{appname}}/config/test/hello

则显示:hello

三、命名空间

在php.ini文件中使用yaf.use_namespace = 1即可在项目中启用命名空间

1、框架系统类

系统类都是以Yaf为前缀的,启用命名空间后,大多数是以_换成\的形式引用类,如Yaf_Config_Ini类,使用命名空间后为Yaf\Config\Ini。

注:以_Abstract为后缀的类,一般和前面的一个单词是连在一起的,因为Abstract是一个关键词,不能当作类名,如Yaf_Controller_Abstract,使用命名空间的用法是Yaf\Controller_Abstract

2、自定义类自定义类一般放到application\library下,当然可以通过php.ini中的yaf.library来定义类库的位置或者通过application.ini中的application.library来定义类的位置

四、类加载器

Yaf中提供了Yaf\Loader加载器类实现类的加载(未启用命名空间时是Yaf_Loader)

1、自动加载(1)框架自动加载类

yaf在启动后会通过目录映射的形式自动加载MVC三层中的文件

Yaf目录映射规则

类型

后缀(或者前缀, 可以通过php.ini中ap.name_suffix来切换)

映射路径

控制器

Controller

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

数据模型

Model

{项目路径}/models/

插件

Plugin

{项目路径}/plugins/

注:来源于yaf官方文档

(2)全局自动加载类

所有应用或项目共享的类,如所有项目都使用了smarty这个类库,可以全局加载,通过php.ini中的yaf.library来设置全局类的路径

(3)本地自动加载类

某个项目或应用中的需要自动加载的类,可以通过调用Yaf_Loader(命名空间下的Yaf\Loader)的registerLocalNamespace方法, 来申明那些类前缀是本地类,然后再通过调用Yaf_Loader的autoload方法自动加载

注:如果本地类在library目录下,是不需要注册的

例:在library目录下建立Baidu\Map\Ip.php的文件,内容如下:

namespaceBaidu\Map;

classIp

{

publicfunctiongetLocation($ip)

{

return'hz';

}

}

在控制器Test.php中调用:

classTestControllerextendsYaf\Controller_Abstract

{

publicfunctionhelloAction()

{

$ip=newBaidu\Map\Ip();

$location=$ip->getLocation('8.8.8.8');

$this->getView()->assign('page',$location);

}

}

将会输出:hz

2、文件导入(文件加载)

通过Yaf_Loader的import方法可以文件的导入或加载,推荐使用此方法代替require_once或者include_once

使用方法为:其参数为文件路径

//导入一个函数库文件common.php,即可使用common.php中的函数

Yaf\Loader::import(APP_PATH.'/application/helpers/common.php');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值