zoukankan      html  css  js  c++  java
  • zend 路由

    PHP技术交流群 170855791

    Zend_controller_Router_Rewrite类是标准的框架路由器。路由是个过程,在这个过程中它取出URI的端点(跟着基本URL的URI的那部分)并把它分解成参数来决定使用那个模块、哪个控制器以及控制器中的动作。模块,控制器、动作和其它一些参数被打包到Zend_Controller_Requert_Http对象中(请求对象,因此可以通过Zend_Controller_Request::getParam()或Zend_Controller_Action::_getParam()方法来访问URL中的一些参数),接着这个对象由Zend_Controller_Dispatcher_Standard来处理。路由只发生一次:当请求最初被接受和第一个控制器被派遣之前。
    zend路由器可以通过前端控制器getRouter()来获取路由实例,以下是Front.php中的getRouter方法:

    1 public function getRouter()
    2 {
    3 if (null == $this->_router) {
    4 require_once 'Zend/Controller/Router/Rewrite.php';
    5 $this->setRouter(new Zend_Controller_Router_Rewrite());
    6 }
    7
    8 return $this->_router;
    9 }

    $route = $ctrl->getRouter();
    通过Rewrite.php方法中的getRouter($name, Zend_Controller_Router_Route_Interface $route)方法添加自定义路由,该方法接受两个参数:
    第一个参数为要添加的路由名
    第二个参数需要传递一个实现了Zend_Controller_Router_Route_Interface接口的实例(通常为Zend_Controller_Router_Route类的实例)。
    这里有三个特殊的变量可用于路由'module','controller','action'。这些特殊的变量被Zend_Controller_Dispatcher用来找出控制器和动作然后派遣过去。例:

    new Zend_Controller_Router_Route('taq/:var',array('module' => 'test', 'controller' => 'test','action' => 'index'));

    Zend_Controller_Router_Route构造方法共可以传递五个参数
    __construct($route, $defaults = array(), $reqs = array(), Zend_Translate $translator = null, $locale = null)
    1、$route:它是路由的定义,用于映射到URL中除基地址部分的剩下部分,路由定义静态和动态部分,他们由('/') 符分开,静态部分只是简单的字符串:taq部分。动态部分,被叫做变量,用预设的冒号来标记变量名: :var。同时这个变量可以设置一个默认值,如:'var'='5'附加到参数数组中,默认var变量为5。同时它也可以只是一个简单的字符串'taq',称为静态路由。
    2、$defaults = array():用于定义所用的模块,控制器以及所使用的动作。
    3、$reqs = array():用于定义所匹配的变量的正则表达式。如:array(‘var‘=>‘\d+‘),只有当变量值匹配该正则时才回执行这个路由,否则会跳过该路由继续寻找相匹配的路由。

    缺省路由被存储在RewriteRouter名(index)为'default'的简单的Zend_Controller_Router_Module对象。它被创建多多少少像下面这样:
    $compat = new Zend_Controller_Router_Module(array(), $dispatcher, $request);
    $this->addRoute('default', $compat);
    若不想使用这个默认路由,可以重写自己的缺省路由,只需把它存储在default名字既可,或使用removeDefaultRoutes()完全清楚它:
    $router->removeDefaultRouters();

    最后使用RouterRewrite中的addRoute($name,$route)方法添加路由
    $name:为路由名称
    $route:为路由实例

     完整代码:

    1 //设置路由
    2 $router = $ctrl->getRouter();
    3 $route = new Zend_Controller_Router_Route('taq/:var',array('module' => 'test', 'controller' => 'test','action' => 'index'));
    4 $router->addRoute('taq', $route);


    补充:

    路由采用倒叙匹配(后进先出),所以应当将常用路由放到下面来确保能够首先被定义
    定义了’id/:aid’形式的路由规则之后,在动作控制器中,使用
    $this->_request->getParam(‘aid’);
    来获得id值.

  • 相关阅读:
    java实现第六届蓝桥杯垒骰子
    java实现第六届蓝桥杯打印大X
    java实现第六届蓝桥杯打印大X
    java实现第六届蓝桥杯移动距离
    java实现第六届蓝桥杯移动距离
    java实现第六届蓝桥杯加法变乘法
    java实现第六届蓝桥杯加法变乘法
    java实现第六届蓝桥杯奇妙的数字
    将已有的Eclipse项目转化为Maven项目
    彻底理解JAVA动态代理
  • 原文地址:https://www.cnblogs.com/gbyukg/p/2184318.html
Copyright © 2011-2022 走看看