Zend Framework教程之路由功能Zend

Zend Framework的路由提供了两个主要功能路由和创建路由。

Zend_Controller_Router的Route类和相应Route目录下的类定义常见的路由操作

接口Zend_Controller_Router_Interface,类Zend_Controller_Router_Abstract和Zend_Controller_Router_Rewrite完成了基本的路由,创建路由,删除路由的功能。

└── Router
    ├── Abstract.php
    ├── Exception.php
    ├── Interface.php
    ├── Rewrite.php
    ├── Route
    │   ├── Abstract.php
    │   ├── Chain.php
    │   ├── Hostname.php
    │   ├── Interface.php
    │   ├── Module.php
    │   ├── Regex.php
    │   └── Static.php
    └── Route.php

Zend_Controller_Router路由功能的实现

Zend_Controller_Router_Interface

<?php interface Zend_Controller_Router_Interface { /** * Processes a request and sets its controller and action. If * no route was possible, an exception is thrown. * * @param Zend_Controller_Request_Abstract * @throws Zend_Controller_Router_Exception * @return Zend_Controller_Request_Abstract|boolean */ public function route(Zend_Controller_Request_Abstract $dispatcher); /** * Generates a URL path that can be used in URL creation, redirection, etc. * * May be passed user params to override ones from URI, Request or even defaults. * If passed parameter has a value of null, it's URL variable will be reset to * default. * * If null is passed as a route name assemble will use the current Route or 'default' * if current is not yet set. * * Reset is used to signal that all parameters should be reset to it's defaults. * Ignoring all URL specified values. User specified params still get precedence. * * Encode tells to url encode resulting path parts. * * @param array $userParams Options passed by a user used to override parameters * @param mixed $name The name of a Route to use * @param bool $reset Whether to reset to the route defaults ignoring URL params * @param bool $encode Tells to encode URL parts on output * @throws Zend_Controller_Router_Exception * @return string Resulting URL path */ public function assemble($userParams, $name = null, $reset = false, $encode = true); /** * Retrieve Front Controller * * @return Zend_Controller_Front */ public function getFrontController(); /** * Set Front Controller * * @param Zend_Controller_Front $controller * @return Zend_Controller_Router_Interface */ public function setFrontController(Zend_Controller_Front $controller); /** * Add or modify a parameter with which to instantiate any helper objects * * @param string $name * @param mixed $param * @return Zend_Controller_Router_Interface */ public function setParam($name, $value); /** * Set an array of a parameters to pass to helper object constructors * * @param array $params * @return Zend_Controller_Router_Interface */ public function setParams(array $params); /** * Retrieve a single parameter from the controller parameter stack * * @param string $name * @return mixed */ public function getParam($name); /** * Retrieve the parameters to pass to helper object constructors * * @return array */ public function getParams(); /** * Clear the controller parameter stack * * By default, clears all parameters. If a parameter name is given, clears * only that parameter; if an array of parameter names is provided, clears * each. * * @param null|string|array single key or array of keys for params to clear * @return Zend_Controller_Router_Interface */ public function clearParams($name = null); }

Zend_Controller_Router_Abstract

<?php /** Zend_Controller_Router_Interface */ require_once 'Zend/Controller/Router/Interface.php'; abstract class Zend_Controller_Router_Abstract implements Zend_Controller_Router_Interface { /** * URI delimiter */ const URI_DELIMITER = 'https://www.jb51.net/'; /** * Front controller instance * @var Zend_Controller_Front */ protected $_frontController; /** * Array of invocation parameters to use when instantiating action * controllers * @var array */ protected $_invokeParams = array(); /** * Constructor * * @param array $params * @return void */ public function __construct(array $params = array()) { $this->setParams($params); } /** * Add or modify a parameter to use when instantiating an action controller * * @param string $name * @param mixed $value * @return Zend_Controller_Router */ public function setParam($name, $value) { $name = (string) $name; $this->_invokeParams[$name] = $value; return $this; } /** * Set parameters to pass to action controller constructors * * @param array $params * @return Zend_Controller_Router */ public function setParams(array $params) { $this->_invokeParams = array_merge($this->_invokeParams, $params); return $this; } /** * Retrieve a single parameter from the controller parameter stack * * @param string $name * @return mixed */ public function getParam($name) { if(isset($this->_invokeParams[$name])) { return $this->_invokeParams[$name]; } return null; } /** * Retrieve action controller instantiation parameters * * @return array */ public function getParams() { return $this->_invokeParams; } /** * Clear the controller parameter stack * * By default, clears all parameters. If a parameter name is given, clears * only that parameter; if an array of parameter names is provided, clears * each. * * @param null|string|array single key or array of keys for params to clear * @return Zend_Controller_Router */ public function clearParams($name = null) { if (null === $name) { $this->_invokeParams = array(); } elseif (is_string($name) && isset($this->_invokeParams[$name])) { unset($this->_invokeParams[$name]); } elseif (is_array($name)) { foreach ($name as $key) { if (is_string($key) && isset($this->_invokeParams[$key])) { unset($this->_invokeParams[$key]); } } } return $this; } /** * Retrieve Front Controller * * @return Zend_Controller_Front */ public function getFrontController() { // Used cache version if found if (null !== $this->_frontController) { return $this->_frontController; } require_once 'Zend/Controller/Front.php'; $this->_frontController = Zend_Controller_Front::getInstance(); return $this->_frontController; } /** * Set Front Controller * * @param Zend_Controller_Front $controller * @return Zend_Controller_Router_Interface */ public function setFrontController(Zend_Controller_Front $controller) { $this->_frontController = $controller; return $this; } }

Zend_Controller_Router_Rewrite

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/be31dc12cdaf27a01b537c9f9c0f4f09.html