• 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库
没有结果
查看所有结果
没有结果
查看所有结果

Yaf框架 安装、PHP-ext引入、目录结构、路由、模型、视图、控制器

Mr.Lee 由 Mr.Lee
2018年5月20日
在 Yaf, 后台框架
0
Yaf框架 安装、PHP-ext引入、目录结构、路由、模型、视图、控制器
0
分享
7
浏览

写在前面

鸟哥是谁?

注意:也是PHP核心开发者之一(目前的最新的PHP7参与其中,并且很大部分的代码都是他贡献的)。和之前Linux私房菜鸟哥不是同一个人(这个鸟哥是台湾,主要是做Linux教程。)但我们yaf的鸟哥是惠新宸(风雪之隅)(之前是在百度工作的时候网名叫做雪候鸟,年龄相对大一点,所以被称为鸟哥。也在新浪微博工作。目前应该是在链家做架构师)

相关报道:

http://www.infoq.com/cn/articles/weibo-architect-on-php-development

yaf是什么?

注意:yaf框架是使用C语言进行编写的,编程之后编程成一个dll文件作为PHP的扩展进行出现,当PHP引入该扩展后,就在PHP里面内置很多的类库。然后我们就可以直接调用这些类库(等价PHP里面内置的一些功能,例如内置的函数、stdClass内置标准类),注意:同类型的框架还有国外的phalcon框架,也是做为PHP的出现,也是一个高性能的扩展,这类框架的性能折损非常少,性能仅次于原生的PHP。看一下官方的简介:

相关资源

yaf手册:http://yaf.laruence.com/

github地址:https://github.com/laruence/yaf

作者博客:http://www.laruence.com/

yaf安装

dll扩展下载

yaf框架是作为PHP的一个扩展存在的,所以我们需要去下载对应的扩展文件,然后在php.ini文件引入即可。

扩展下载地址:

http://pecl.php.net/package/yaf

这里我们假设使用的朋友都是使用的windows操作系统,点击DLL下载即可,这里我们一2.3.5为例。接下来我们来到具体的下载页面:

版本新的的选择需要严格的依赖phpinfo函数给出的信息

PHP-ext引入

将下载后的php_yaf.dll文件复制到PHP的ext扩展目录即可

php.ini配置文件

最后在php.ini文件最后面中引入如下一段即可:

[yaf]

extension=php_yaf.dll

yaf.environ=product

重复apache后,使用phpinfo函数见到如下信息即代表扩展配置成功。

注意:当我们把PHP的yaf扩展引入后,PHP内部就会存在很多的yaf提供的类库,但是yaf官方并没有给出yaf框架的目录文件等信息,但是提供一个官方的建议:yaf框架的目录的组织结构应该如何实现。

yaf快速入门

项目目录结构

在成功安装扩展后,我们就可以使用yaf进行开发,但是在开发之前,我们需要规划一个项目开发目录。

当让我们也可以使用官方提供的代码生成工具进行自动生成:

http://www.laruence.com/manual/tutorial.last.html

官方的建议目录如下:

application

│ │ Bootstrap.php

│ ├─common

│ │ functions.php

│ ├─controllers

│ │ Index.php

│ ├─library

│ ├─models

│ │ │ User.php

│ │ │

│ │ └─Db

│ │ Medoo.php

│ ├─modules

│ │ └─Admin

│ │ ├─controllers

│ │ │ Back.php

│ │ └─views

│ ├─plugins

│ └─views

│ └─index

│ index.phtml

├─conf

│ application.ini

│

└─public

index.php

虚拟主机配置

需要注意的是,项目的入口文件是放在public目录下的,则我们建立的项目的虚拟主机的目录应该是指定到public目录。一个示例的虚拟主机的配置如下:

<VirtualHost *:80>

DocumentRoot “C:\phpStudy\WWW\yaf.dev\public”

ServerName yaf.dev

ServerAlias

<Directory “C:\phpStudy\WWW\yaf.dev\public”>

Options Indexes FollowSymLinks ExecCGI

AllowOverride All

Order allow,deny

Allow from all

Require all granted

</Directory>

</VirtualHost>

入口文件编写

在public目录的index.php文件的内容如下:

需要注意的是,只需要在该文件定义一个常量,然后实例化Yaf_application(),同时传递一个配置文件即可。

<?php

define(“APPLICATION_PATH”, realpath(dirname(__FILE__) . ‘/../’));

define(“APPLICATION_COINFIG_FILE”,APPLICATION_PATH . “/conf/application.ini”);

date_default_timezone_set(‘Asia/Shanghai’);

$app = new Yaf_Application(APPLICATION_COINFIG_FILE);

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

配置文件

在config目录的application.ini文件里面只需要定义如下的配置内容即可。

[product]

;分号代表注释,支持直接写PHP中的已定义常量

application.directory=APPLICATION_PATH “/application/”

通过刚才的手工目录创建和yaf官方提供的代码生成器的创建,我们发现目录创建还是比较繁琐不适合入门的人去捯饬,那我们可以使用默认的目录结构来进行学习。

composer管理

简介

网站:https://packagist.org/packages/gogery/yaf

  1. 使用命令创建本地项目 local.yaf.com

> composer create-project gogery/yaf local.yaf.com

  1. 生成目录结构

  1. 配置虚拟主机

<VirtualHost *:80>

DocumentRoot “C:\phpStudy\WWW\local.yaf.com\public”

ServerName local.yaf.com

ServerAlias

<Directory “C:\phpStudy\WWW\local.yaf.com\public”>

Options FollowSymLinks ExecCGI

AllowOverride All

Order allow,deny

Allow from all

Require all granted

</Directory>

</VirtualHost>

  1. 浏览器访问效果

建议大家直接使用composer进行目录的管理。

IDE配置

注意:yaf框架扩展的引入,在使用的时候内置了很多的类文件,如果没有一个IDE进行代码的提示,我们是很难记得住到底存在哪些类,哪些方法,则我们可以为IDE配置一下代码提示。yaf代码提示的插件。

网站:https://github.com/elad-yosifon/php-yaf-doc

  1. 插件解压

  1. 配置phpstorm的插件目录

配置插件的目录

目录结构以及插件都安装完成后,则可以正式的学习yaf框架(yaf框架也是一个单一入口 + MVC架构)。

学习框架主要是从如下几个方面进行学习:(MVC CVM)

  1. 学习控制器
  2. 学习视图
  3. 学习模型(但是需要注意的,yaf框架本身是没有提供模型,这个需要用户自己去完成,因为作者觉得pdo已经是一个很好的操作数据库的工具,没必要在写一个,我们会单独的学习一个第三方的模型类 Medoo)

  1. 配置文件
  2. …..

控制器-constrollers

经过上面的操作,基本的目录结构已经搭建完毕,接下来我们完成我们的第一个控制器的编写。在正式编写控制器之前,我们只要弄清楚如下几个问题,即可快速掌握控制器的使用。

  1. 控制器写在哪里?
  2. 控制器的文件如何命名?
  3. 控制器里面的内容如何编写?
  4. 控制器里面的方法如何命名?
  5. 控制器里面如何载入视图?
  6. 控制器里面如何给视图赋值?
  7. 如何在视图里面显示控制器的赋值变量?

实操:

  1. 控制器写在哪里?(application/controllers目录)
  2. 控制器的文件如何命名?

  1. 控制器里面的内容如何编写?

  1. 控制器里面的方法如何命名?

  1. 控制器里面如何载入视图?

视图创建

效果

  1. 控制器里面如何给视图赋值?

  1. 如何在视图里面显示控制器的赋值变量?(直接使用原生的PHP输出、yaf内置的模板引擎只支持原生的PHP语法)

效果

视图-views

视图主要是用户来展示数据和收集用户的数据。

在正式学习视图之前,我们先思考如下几个问题:

1. 视图文件写在哪里?

2. 视图文件如何命名?

3. 如何在控制器里面调用视图,如何获取视图里面的内容?

4. 在控制器里面如何给视图赋值?

5. 如何在视图里面显示控制器的赋值变量?

实操:

  1. 视图文件写在哪里?(注意:需要注意是存在模块,如果有模块,则写在模块的对应的views目录,没有则写在application/views/目录下)

  1. 视图文件如何命名?

答:文件的命名满足和方法同名,并且后缀是 phtml

  1. 如何在控制器里面调用视图,如何获取视图里面的内容?

答:yaf框架默认会自动载入视图

如果终止return false 或者 Yaf_Dispatcher::getInstance()->disableView();

  1. 在控制器里面如何给视图赋值?

答:$this->getView()->assign(‘视图调用名称’, $变量名称)

  1. 如何在视图里面显示控制器的赋值变量?

答:原生的PHP

注意:Yaf_View_Simple 常见方法使用:

yaf模型-models

注意

需要注意的是yaf框架并没有提供模型类,这个需要用户自己去实现,我们可以自己封装一个模型,也可以使用被人提供好的模型类文件,例如如下的一个模型类:

相关文档:http://medoo.lvtao.net/doc.php

Medoo基本使用

  1. 下载
  2. 引入
  3. 实例化(进行数据库配置)

实操:

具体代码参考

模型命名

注意:yaf框架并没有模型类,但是规定了模型的书写的规则以及加载的实现。

命名、实例化如何加载。

例如:我们打算在application/models/目录下创建一个Goods.php类文件,则类名应该如下:

通过上面的操作我们可以很方面的完成模型类的定义,当我们定义好了之后,直接在控制器里面进行实例化即可,yaf框架会自动进行类的载入。

问题:通过上面的操作定义的模型类是直接在application/models目录下定义的,如果现在我们需要在该目录下在建立子目录,然后在子目录里面定义模型,则模型的类名该如何定义?

总结:在yaf里面模型的命名是通过下划线来查找类的目录结构。

yaf模块化-modules

配置

注意:yaf框架默认的目录结构里面使用的Index模块,如果我们需要进行其他的模块的创建,例如配置后台Admin模块,Member模块。则我们需要在application.ini里面进行配置,然后在application/modules/目录创建对应的模块目录,模块目录下创建对应的controllers目录和views目录。

假如我们要新增加一个Member模块用来做后台管理(需要注意的是如果我们使用模块功能,则必须加上Index模块)。则我们需要在application.ini的某个节里面配置如下信息:

application.modules = “Index,Member”

新建模块

需要注意的是:其中Admin目录就和配置的模块名称一致,每个模块目录下都可以新建controllers和views目录用作控制器和视图,但是模块下的models内的文件不支持自动载入,所以在该模块下的一些业务方法只能放在application/models目录下。

模块里面的控制器和视图同上面的控制器的使用一致。

访问

小写URL访问:

域名/index.php/模块名称/控制器名称/方法名称

yaf表单-Yaf_Request_Http

简介

在前后台进行交互的过程中,后端程序不可避免的需要接收用户提交的数据,常见的数据有

  1. get提交数据
  2. post提交数据
  3. 上传文件数据
  4. get查询字符串
  5. cookie数据等等

数据接收

在控制器里面我们可以通过$this->getRequest()来进行数据的接收,该方法返回的是Yaf_Request_Http的实例。

yaf之session-Yaf_Session

简介

由于http请求是无状态的,则在页面交互的过程中,有的时候我们需要跨脚本共享数据,则我们可以使用cookie或者session进行处理,session相对来说更加的安全,yaf框架内置了一个session处理类,可以非常方便的帮助我们进行session的处理。

使用

Yaf_Session::getInstance()->get(‘name’)

yaf配置篇-Yaf_Config_Ini

简介

配置文件基本可以说是每个项目都会有,在配置文件中我们通常会配置数据库访问地址、redis连接、url地址等等。

yaf对于配置文件的解析提供了节(section)的支持,并且还支持节之间的继承功能,将节的设置和yaf运行环境(yaf.environ)结合起来就可以达到很好的配置效果,且看如何实现。

php.ini配置

在配置php支持yaf的时候,可以设置一个参数yaf.environ:把本地开发设置成develop、测试环境配置成test、生产环境配置成product,如:

application.ini文件配置

yaf配置文件一般都放在项目的conf文件夹下。Yaf _Application实例化的时候需要传递一个配置文件路径,假设我们的配置文件叫application.ini,先看下application.ini的结构:

[common]

; 通用配置,数据库配置

resources.database.params.driver = “pdo_mysql”

resources.database.params.hostname = “127.0.0.1”

resources.database.params.port = 3306

resources.database.params.database = “database”

resources.database.params.username = “username”

resources.database.params.password = “password”

[product : common]

; 生产环境配置,这里的配置除了节之外,节和节之间还有继承关系。例如[product : common]就表示product的配置会继承common的配置。先配置一个数据库连接看看。

[test : common]

; 测试环境配置

[develop : common]

; 开发环境配置

resources.database.params.hostname = “127.0.0.1”

resources.database.params.database = “database”

resources.database.params.username = “username”

resources.database.params.password = “password”

这样当项目运行环境在develop下的时候,会优先读取[develop : common]内的配置,如果没有则会从[common]中获取。在项目中任何地方都可以通过如下的方法获取application.ini里面的配置信息:

Yaf_Application::app()->getConfig();

额外的配置

随着项目越来越庞大,配置也会越来越复杂,如果都放在项目默认的配置文件application.ini中,可能配置会有好几百行,这样就不容易维护了。

一般我们会考虑新建配置文件用来存储额外的配置。yaf中提供了Yaf_Config_Ini类来处理这些额外的配置文件。

$config = new Yaf_Config_Ini( APPLICATION_PATH . ‘/conf/url.ini’,  ini_get(‘yaf.environ’) );

类的自动载入机制-libraris

简介

在yaf里面类库的默认目录是application下的library目录,比如我们要写一个Page.php类文件,那么我们需要建立这样的application/library/Page.php类文件。

但是需要注意的是,如果我们需要目录进行嵌套,则类的名称应该是使用下划线进行连接,并且路径的首字母应该大写。

例如:我们打算在application/library/目录下,建议一个Dao目录,然后在该目录下建议一个Mysql目录,并在Mysql目录下建立一个Query.php类文件,则类名应该如下:

class Dao_Mysql_Query{

}

通过这样定义的类,yaf框架则可以根据我们的类名来获取对于的路径,实现对应的自动加载机制。

助手函数扩展-Yaf_Loader

在Bootstrap.php文件定义一个加载助手函数的公共方法,使用Yaf_Loader进行助手函数文件导入。

public function _initCommonFunctions(){

// 加载定义助手函数

Yaf_Loader::import(APPLICATION_PATH . ‘/application/common/functions.php’);

}

响应-Yaf_Response_Abstract

有的时候我们需要进行URL的跳转,则可以使用该类进行响应处理

路由-Yaf_Route-*

简介

yaf框架支持如下五种路由:

  1. Yaf_Route_Simple

例如:http://local.yaf.com/index.php?m=index&c=index&a=index (普通路由)

  1. Yaf_Route_Supervar
  2. Yaf_Route_Static
  3. Yaf_Route_Rewrite
  4. Yaf_Route_Regex

例如:http://local.yaf.com/list-12.html

简单路由使用-方式一

创建路由规则的步骤:

  1. 在Bootstrap.php文件创建一个路由器对象
  2. 设置路由规则
  3. 调用路由对象的addRoute方法添加路由规则

public function _initDefineRouter()

{

$router = Yaf_Dispatcher::getInstance()->getRouter();

$mac = new Yaf_Route_Simple(‘m’, ‘c’, ‘a’);

$router->addRoute(‘mac’, $mac);

}

简单路由使用-方式二

  1. 在application.ini定义路由段

[route]

routes.simple.type=”simple”

routes.simple.module=md

routes.simple.controller=c

routes.simple.action=as

[product:route]

  1. 在Bootstrap.php里面进行配置注册

public function _initConfig()

{

$config = new Yaf_Config_Ini(APPLICATION_COINFIG_FILE);

Yaf_Registry::set(“config”, $config);

}

public function _initDefineRouter()

{

$router = Yaf_Dispatcher::getInstance()->getRouter();

$router->addConfig( Yaf_Registry::get(‘config’)->route->routes );

}

正则路由-方式一

1. 直接使用正则类进行生成

$router = Yaf_Dispatcher::getInstance()->getRouter();

$route = new Yaf_Route_Regex(

‘#^/product/([a-zA-Z-_0-9]+)$#’,

array(

‘module’ => ‘index’,

‘controller’ => ‘index’,

‘action’ => ‘index’

),

array(

//完成数字到字符变量的映射

1 => ‘ident’

)

);

$router->addRoute(‘reg’, $route);

正则路由-方式二

  1. 在application.ini定义正则路由段

[route]

routes.regex.type=”regex”

routes.regex.match=”#^/list/([0-9])+\/([a-z0-9]+)$#”

routes.regex.route.module=Index

routes.regex.route.controller=Index

routes.regex.route.action=index

routes.regex.map.1=name

routes.regex.map.2=value

[product:route]

2. 在Bootstrap.php里面进行配置注册

相关学习资料

http://wiki.phpboy.net/

http://www.phpabc.cn/yaf-kuang-jia-zhi-phpstrom-dai-ma-zi-dong-bu-quan-yaf-ide-auto-complete-2.html

http://www.01happy.com/

http://www.widuu.com/archives/category/yaf-framework-2

https://www.mengzhidu.com/

http://www.php1.cn/detail/php-wentis-c817f8fa3d.html

https://segmentfault.com/a/1190000004016373

https://devhub.io/repos/xudianyang-yaf.app

http://www.oss.io/p/xudianyang/yaf.app

案例演示

使用yaf完成一套curd操作,同时做用户的登录和退出,可以理解完成一个后台的用户模块

用户展示

  1. 定义一个init方法,完成初始化操作

  1. 定义一个lst方法,完成数据展示

  1. 定义一个lst.phtml视图文件

效果

用户添加

  1. 定义一个add方法,完成用户添加

  1. 定义一个add.phtml视图文件,展示添加表单

效果

用户删除

  1. 定义一个del方法,完成用户删除

用户编辑

  1. 定义一个edt方法,完成用户编辑

  1. 定义一个edt.phtml视图页面,展示待编辑的数据

效果

用户登录

  1. 定义一个login方法,完成用户的登录处理

用户退出

  1. 定义一个logout方法,完成用户退出

标签: PHP-ext引入Yaf安装控制器模型目录结构视图路由
上一篇文章

yii2 框架 安装、目录介绍、路由、模型、视图、控制器、留言板案例

下一篇文章

CI框架 安装、路由、模型、视图、控制器、实现用户CURD、跳转函数封装、分页插件、源码分析

下一篇文章
CI框架 安装、路由、模型、视图、控制器、实现用户CURD、跳转函数封装、分页插件、源码分析

CI框架 安装、路由、模型、视图、控制器、实现用户CURD、跳转函数封装、分页插件、源码分析

发表回复 取消回复

您的邮箱地址不会被公开。 必填项已用 * 标注

Search

没有结果
查看所有结果

About Me

个人随笔

Winston Lee

Programmer

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Winston Lee

About Me

Hello & welcome to my blog! My name is Winston Lee and am a programmer and am keen on sharing.

Categories

  • AJAX
  • BootStrap
  • CodeIgniter
  • CSS
  • DedeCMS
  • GIT
  • HTML
  • Javascript
  • Jquery
  • Laravel
  • Laravel在线教育平台
  • Linux
  • Memcache
  • MongoDB
  • MVC
  • Mysql
  • Nginx
  • Node
  • PDO
  • PHP
  • PHP7
  • PHP基本语法
  • PHP核心编程
  • Redis
  • Smarty
  • Socket
  • SVN
  • Swoole
  • TP3.2
  • TP3.2商城
  • TP5.0
  • TP5.0商城
  • XML
  • Yaf
  • Yii
  • Yii手机直播
  • 二次开发
  • 优化方案
  • 前端技术
  • 前端框架
  • 后台框架
  • 基本操作
  • 微信公众号
  • 数据库
  • 未分类
  • 混合APP
  • 源码Blog项目
  • 版本控制
  • 环境搭建
  • 移动端开发
  • 网站优化
  • 资料
  • 面向对象
  • 面向对象编程
  • 页面静态化

Tags

DOM Json RBAC 事件 传参 函数 分页 判断语句 匿名函数 变量 图片上传 存储过程 安装 对象 封装 属性 接口 控制器 数据库操作 数据类型 数据表 数组 文件上传 无刷新分页 权限 标签 模型 正则 流程控制 目录结构 算法 类 索引 继承 缩略图 表关系 视图 路由 运算符 选择器 递归 配置 错误处理 页面静态化 验证码
  • 首页
  • 前端
  • 前端框架
  • PHP
  • 数据库
  • 优化
  • 后台框架与实战
  • 移动开发
  • 二次开发
  • Linux
  • 版本控制
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3

没有结果
查看所有结果
  • 首页
  • 前端
    • HTML
    • CSS
    • Javascript
    • XML
    • AJAX
  • 前端框架
    • BootStrap
    • Jquery
  • PHP
    • 语法
    • 核心
    • 面向对象
    • PHP7
    • Socket
    • Swoole
  • 数据库
    • Mysql
    • Redis
    • Memcache
    • MongoDB
  • 优化
    • 优化方案
    • 页面静态化
    • Nginx
  • 后台框架与实战
    • Smarty
    • 源码Blog
    • TP3.2
    • TP3.2商城
    • TP5.0
    • TP5.0商城
    • Laravel
    • Laravel在线教育平台
    • Yii
    • Yii手机直播
    • CodeIgniter
    • Yaf
  • 移动开发
    • 微信公众号
    • 混合APP
  • 二次开发
    • DedeCMS
  • Linux
    • 基本操作
    • 环境搭建
  • 版本控制
    • GIT
    • SVN
  • Node.js
  • 资料库

沪公网安备31011502400873 | 沪ICP备2024050435号-3