yaf使用的总结

YAF使用的总结

听说yaf是基于php的扩展写的php框架,不胜向往,一直没有时间去使用它

yaf的参考资料

最近总算使用yaf写了个简单的应用地址

和常用的php框架一样,yaf提供了单入口

入口文件的格式

define("APP_PATH", realpath(dirname(__FILE__))."/.." );
$app = new Yaf_Application(APP_PATH."/application/conf/application.ini");
$app->bootstrap()->run();

yaf必须配置项目的路径

application.directory = APP_PATH  "/application"

yaf的路由,你只需要将你nginx配置到指定public路径,yaf的默认路由会自动解析到对应的路径,后面详细说下yaf的路由

我的nginx配置,可以看到所有的请求都被重新定向到index.php 这个入口文件去了哦。

“`
server {
listen 80;
server_name framework.myyaf.yaf.kang.com;
access_log /Users/kang/Documents/var/log/access.log;
root /Users/kang/Documents/phpProject/studyphp/framework/yaf/yaf_testyaf/public;
index index.php index.html index.htm;

          location / { 
              try_files $uri $uri/ /index.php;        
          }   

          location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
            include        fastcgi_params;
            include         fastcgi.conf;
          }   
          if (!-e $request_filename) {
                rewrite ^/(.*)  /index.php/$1 last;
          }   
    }  

“`
如果按照上面的步骤配置好,yaf就可以正常运行了。

摘自鸟哥的说明

+ public
  |- index.php //入口文件
  |- .htaccess //重写规则    
  |+ css
  |+ img
  |+ js
+ conf
  |- application.ini //配置文件   
+ application
  |+ controllers
     |- Index.php //默认控制器
  |+ views    
     |+ index   //控制器
        |- index.phtml //默认视图
  |+ modules //其他模块
  |+ library //本地类库
  |+ models  //model目录
  |+ plugins //插件目录

我的例子里面是没有使用module的。简单的例子没必要那么多层级

说说yaf的路由,yaf有一个路由器,可以定义5种路由规则

Yaf_Route_Simple 简单路由,是什么?

定义了通过传递参数的路由规则
我们可以通过 index.php?m=test&c=c&a=a访问moudle test 下的controller c的action a

Yaf_Route_Supervar 简单路由可以获取uri扩展
http://domain.com/index.php?r=/test/c/a
效果同上

Yaf_Route_Static 默认路由协议

http://domain.com/test/c/a 也能达到上面的效果

Yaf_Route_Map map路由

我没有试过,大家可以参考这个说明事实,简单的说就是通过/切分重写的参数

Yaf_Route_Map议是一种简单的路由协议, 它将REQUEST_URI中以'/'分割的节, 组合在一起, 形成一个分层的控制器或者动作的路由结果. Yaf_Route_Map的构造函数接受俩个参数, 第一个参数表示路由结果是作为动作的路由结果,还是控制器的路由结果. 默认的是动作路由结果. 第二个参数是一个字符串, 表示一个分隔符, 如果设置了这个分隔符, 那么在REQUEST_URI中, 分隔符之前的作为路由信息载体, 而之后的作为请求参数.

Yaf_Route_Rewrite 重写

这个真的很方便

Yaf_Route_Regex 正则路由

http://framework.myyaf.yaf.kang.com/msg/listmsg/16
我可以配置为

    "/msg/del/:id",array('controller' => 'msg','action' => 'del')

    controller是msg
    action是listmsg
    第三个参数id=16

我们可以通过$id = $this->getRequest()->getParam('id',0);获取参数

如果不配置就是
http://framework.myyaf.yaf.kang.com/msg/listmsg/id/16了

我没有看到yaf的get函数,需要摸索,只能通过这种方式去配置get参数

Yaf_Route_Regex 也挺有意思的,大家可以试试,

例如

http://framework.myyaf.yaf.kang.com/msg/16
映射到msg controller的list方法,接受参数

$route = new Yaf_Route_Regex(
     'msg/([a-zA-Z-_0-9]+)',
     array(
      'controller' => 'msg',
      'action' => 'list'
     )
   );
   $router->addRoute('product', $route);

获取参数

$id = $this->getRequest()->getParam(1);

添加路由可以在两个地方

1 配置文件
2 booststrap.php文件  ,这个文件可以指定具体位置

通过配置文件添加

;simple
routes.simple.type="simple"
routes.simple.module="m"
routes.simple.controller="c"
routes.simple.action="a"

;supervar
routes.supervar.type="supervar"
routes.supervar.varname=r

;rewrite
;routes.rewrite.type="rewrite"
;routes.rewrite.match="/msg/del/:id"
;routes.simple.controller="msg"
;routes.simple.action="del"

通过booststrap.php文件添加

public function _initRoute(Yaf_Dispatcher $dispatcher){
        //注册路由变量
        $router =  Yaf_Dispatcher::getInstance()->getRouter();
        if(Yaf_Registry::get("config")->routes){
            $router->addConfig(Yaf_Registry::get("config")->routes);
        }

        //rewrite
        $route = new Yaf_Route_Rewrite("/index/book",array('controller' => 'index','action' => 'book'));
        $router->addRoute('product',$route);

        //rewrite

        $route = new Yaf_Route_Rewrite("/msg/del/:id",array('controller' => 'msg','action' => 'del'));
        $router->addRoute('product',$route);

    }

yaf没有提供多余的部件

大致有

入口的对象
配置管理
加载器
分发器
请求和响应
路由
自动加载
控制器
异常

剩余的部分需要我们自由填充了哦。大家可以使用composer,很方便的工具

yaf的使用就说到这里,其实说完路由,大致就没啥可说的了,其他的都是在项目中逐步熟悉。

后续有时间的话可以分析下yaf的源码

入门可以看看我的入门项目哦

地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值