学习资料

Yaf(Yet Another Framework)用户手册
http://www.laruence.com/manual/index.html

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

php yaf框架开发扩展实践
http://www.01happy.com/php-yaf-ext-preface/

http://www.php.net/manual/zh/book.yaf.php

特点
1、基于c语言开发;
2、以php扩展的形式安装(.so,.dll)
3、没有封装数据库操作的ORM

安装yaf扩展

扩展下载网址:http://pecl.php.net/package/yaf

windows请下载对应版本的php_yaf.dll,并复制到ext/ 目录。

其它版本请下载源码进行编译。

验证是否安装成功,使用phpinfo查看,如显示出yaf即成功:

或者在命令行使用php -m,若成功安装,可以看到yaf扩展。

参考源码里面的test进行搭建demo。

项目结构

  1. application     应用目录
  2. ├─controllers      控制器目录
  3. Error.php
  4. Index.php
  5. ├─library        库目录
  6. ├─models         模型目录
  7. Sample.php
  8. ├─plugins        插件目录
  9. Sample.php
  10. ├─views         视图目录
  11. ├─error
  12. └─index
  13. └── Bootstrap.php
  14. ├─conf            配置文件目录
  15. └─ application.ini 配置文件  
  16. ├─public          静态文件目录
  17. └── index.php     入口文件

入口文件

index.php

  1. <?php
  2. define("APP_PATH", dirname(__FILE__));
  3.  
  4. /*
  5. $config = array(
  6. "application" => array(
  7. "directory" => APP_PATH . "/application",
  8. ),
  9. );
  10.  
  11. $app = new yaf_application($config);
  12. */

  13. //加载配置文件
  14. $app = new Yaf_Application(APP_PATH . "/conf/application.ini");
  15.  
  16. $app->bootstrap() //call bootstrap methods defined in Bootstrap.php
  17. ->run();

配置文件

conf/application.ini

  1. [common]
    ; 支持直接写PHP中的已定义常量
  2. application.directory = APP_PATH "/application"
  3. application.dispatcher.catchException = TRUE
  4. application.view.ext = html
  5.  
  6. ; 数据库配置
  7. resources.database.params.driver = "pdo_mysql"
  8. resources.database.params.hostname = "127.0.0.1"
  9. resources.database.params.port = 3306
  10. resources.database.params.database = "database"
  11. resources.database.params.username = "username"
  12. resources.database.params.password = "password"
  13. resources.database.params.charset = "UTF8"
  14. resources.database.params.driver_options.1002 = "SET NAMES utf8"
  15.  
  16. [product : common]
  17. ; 生产环境配置
  18.  
  19. [test : common]
  20. ; 测试环境配置
  21.  
  22. [develop : common]
  23. ; 开发环境配置
  24.  
  25. resources.database.params.hostname = "127.0.0.1"
  26. resources.database.params.database = "database"
  27. resources.database.params.username = "username"
  28. resources.database.params.password = "password"

 

控制器

application/controllers

在Yaf中, 默认的模块/控制器/动作, 都是以Index命名的, 当然,这是可通过配置文件修改的。
对于默认模块, 控制器的目录是在application目录下的controllers目录下。

示例:application/controllers/Index.php

  1. <?php
  2. /**
  3. * @name IndexController
  4. * @author {&$AUTHOR&}
  5. * @desc 默认控制器
  6. * @see http://www.php.net/manual/en/class.yaf-controller-abstract.php
  7. */
  8. class IndexController extends Yaf_Controller_Abstract {
  9.  
  10. /**
  11. * 默认动作
  12. * Yaf支持直接把Yaf_Request_Abstract::getParam()得到的同名参数作为Action的形参
  13. * 对于如下的例子, 当访问http://yourhost/{&$APP_NAME&}/index/index/index/name/{&$AUTHOR&} 的时候, 你就会发现不同
  14. */
  15. public function indexAction($name = "Stranger") {
  16. //1. fetch query
  17. $get = $this->getRequest()->getQuery("get", "default value");
  18.  
  19. //2. fetch model
  20. $model = new SampleModel();
  21.  
  22. //3. assign
  23. $this->getView()->assign("content", $model->selectSample());
  24. $this->getView()->assign("name", $name);
  25.  
  26. //4. render by Yaf, 如果这里返回FALSE, Yaf将不会调用自动视图引擎Render模板
  27. return TRUE;
  28. }
  29.  
  30. public function testAction() {
  31. var_dump(YAF_VERSION );exit;
  32. }
  33. }

浏览器上访问:

http://localhost/demo/yaf/index.php/index

http://localhost/demo/yaf/index.php/index/test

视图文件

application/views

Yaf支持简单的视图引擎, 并且支持用户自定义自己的视图引擎, 比如Smarty。对于默认模块, 视图文件的路径是在application目录下的views目录中以小写的action名的目录中.

一个默认Action的视图application/views/index/index.html:

  1. <?php
  2. echo $content, " I am ", $name;
  3. ?>

模型

yaf/application/models

yaf没有封装数据库操作的ORM。这里是示例的一个简单模型,无实际意义,仅做展示。

示例:yaf/application/models/Sample.php

  1. <?php
  2. /**
  3. * @name SampleModel
  4. * @desc sample数据获取类, 可以访问数据库,文件,其它系统等
  5. * @author {&$AUTHOR&}
  6. */
  7. class SampleModel {
  8. public function __construct() {
  9. }
  10.  
  11. public function selectSample() {
  12. return 'Hello World!';
  13. }
  14.  
  15. public function insertSample($arrInfo) {
  16. return true;
  17. }
  18. }

yaf框架封装类库

虽然yaf性能很快,但是缺少诸如表单、数据库操作等类库的封装,在开发上不免带来不便。可以自行集成第三方类库。

(http://git.oschina.net/iceup/yaf-ext)

参考
1、Yaf框架入门只hello yaf - 开源中国社区
http://www.oschina.net/code/snippet_2321543_46680

2、php yaf框架开发扩展实践——前言 - 快乐编程

http://www.01happy.com/php-yaf-ext-preface/

 

yafphp框架的更多相关文章

  1. yaf框架安装

    第一步:明白yaf框架是以扩展的形式要先配置到php里面,对于windows系统的使用者,首先要去官网:http://code.google.com/p/yafphp/downloads/list如果 ...

  2. 避免重复造轮子的UI自动化测试框架开发

    一懒起来就好久没更新文章了,其实懒也还是因为忙,今年上半年的加班赶上了去年一年的加班,加班不息啊,好了吐槽完就写写一直打算继续的自动化开发 目前各种UI测试框架层出不穷,但是万变不离其宗,驱动PC浏览 ...

  3. ABP入门系列(1)——学习Abp框架之实操演练

    作为.Net工地搬砖长工一名,一直致力于挖坑(Bug)填坑(Debug),但技术却不见长进.也曾热情于新技术的学习,憧憬过成为技术大拿.从前端到后端,从bootstrap到javascript,从py ...

  4. 旺财速啃H5框架之Bootstrap(五)

    在上一篇<<旺财速啃H5框架之Bootstrap(四)>>做了基本的框架,<<旺财速啃H5框架之Bootstrap(二)>>篇里也大体认识了bootst ...

  5. Angular企业级开发(5)-项目框架搭建

    1.AngularJS Seed项目目录结构 AngularJS官方网站提供了一个angular-phonecat项目,另外一个就是Angular-Seed项目.所以大多数团队会基于Angular-S ...

  6. Scrapy框架爬虫初探——中关村在线手机参数数据爬取

    关于Scrapy如何安装部署的文章已经相当多了,但是网上实战的例子还不是很多,近来正好在学习该爬虫框架,就简单写了个Spider Demo来实践.作为硬件数码控,我选择了经常光顾的中关村在线的手机页面 ...

  7. 制作类似ThinkPHP框架中的PATHINFO模式功能

    一.PATHINFO功能简述 搞PHP的都知道ThinkPHP是一个免费开源的轻量级PHP框架,虽说轻量但它的功能却很强大.这也是我接触学习的第一个框架.TP框架中的URL默认模式即是PathInfo ...

  8. 旺财速啃H5框架之Bootstrap(四)

    上一篇<<旺财速啃H5框架之Bootstrap(三)>>已经把导航做了,接下来搭建内容框架.... 对于不规整的网页,要做成自适应就有点玩大了.... 例如下面这种版式的页面. ...

  9. 一起学 Java(三) 集合框架、数据结构、泛型

    一.Java 集合框架 集合框架是一个用来代表和操纵集合的统一架构.所有的集合框架都包含如下内容: 接口:是代表集合的抽象数据类型.接口允许集合独立操纵其代表的细节.在面向对象的语言,接口通常形成一个 ...

随机推荐

  1. [2015hdu多校联赛补题]hdu5372 Segment Game

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5372 题意:进行n次操作,操作分两种,0和1,每一个0操作按出现顺序有一个编号(从1开始 0操作 0 ...

  2. poj 2536 Gopher II (二分匹配)

    Gopher II Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 6345   Accepted: 2599 Descrip ...

  3. Selenium2+python自动化30-引入unittest框架

    from selenium import webdriverfrom selenium.webdriver.common.by import Byfrom selenium.webdriver.com ...

  4. C# webBrowser(wpf/winform) 互调js

    1.winform [PermissionSet(SecurityAction.Demand, Name = "FullTrust")] [ComVisible(true)] pu ...

  5. ios 项目引用全局pch文件

    1.在项目中新建添加PCH文件 把这些记下来,下次直接粘贴:$(SRCROOT)/工程名/pch文件名

  6. vagrant 安装使用 win7

    第一步.安装VirtualBox和vagrant 下载地址: https://www.virtualbox.org/wiki/Downloads http://downloads.vagrantup. ...

  7. css3 进度条

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>1 ...

  8. jQuery Mobile 过渡效果

    jQuery Mobile 包含了允许您选择页面打开方式的 CSS 效果. jQuery Mobile 过渡效果 jQuery Mobile 拥有一系列关于如何从一页过渡到下一页的效果. 注释:如需实 ...

  9. Servlet的5种方式实现表单提交(注册小功能),后台获取表单数据

    用servlet实现一个注册的小功能 ,后台获取数据. 注册页面: 注册页面代码 : <!DOCTYPE html> <html> <head> <meta ...

  10. StringGrid 实例5 本例功能:字体修改为居中,红色,20号

    实例5 本例功能: 在FireMonkey中StringGrid对于字体的调整由于没有font属性和onDrawCell事件使得变得有些麻烦,后来费了一些功夫才找到方法.但由于XE3中某些属性还是没有 ...