我正在构建一个Zend Framework 1.11.11应用程序,并且想要驱动路由和内容数据库。
我编写了一个FrontController插件,用于从数据库中检索“路径”,并在路由器中为每个路径创建一个条目,以及相关的控制器和操作。
但是,我希望能够使用'别名' - 一个行为类似于普通网址但是别名的网址。
例如,如果我创建以下内容:
// Create the Zend Route
$entry = new Zend_Controller_Router_Route_Static(
$route->getUrl(), // The string/url to match
array('controller' => $route->getControllers()->getName(),
'action' => $route->getActions()->getName())
);
// Add the route to the router
$router->addRoute($route->getUrl(), $entry);
然后/about/
的路由可以转到staticController,indexAction。
然而,对我来说,创建这条路线别名的最佳方法是什么?所以,如果我去/abt/
它会呈现相同的控制器和动作吗?
对我而言,重新创建相同的路线是没有意义的,因为我将使用路线作为页面'标识符',然后从页面的数据库加载内容...
答案 0 :(得分:1)
你可以扩展静态路由器:
class My_Route_ArrayStatic extends Zend_Controller_Router_Route_Static
{
protected $_routes = array();
/**
* Prepares the array of routes for mapping
* first route in array will become primary, all others
* aliases
*
* @param array $routes array of routes
* @param array $defaults
*/
public function __construct(array $routes, $defaults = array())
{
$this->_routes = $routes;
$route = reset($routes);
parent::__construct($route, $defaults);
}
/**
* Matches a user submitted path with a previously specified array of routes
*
* @param string $path
* @param boolean $partial
* @return array|false
*/
public function match($path, $partial = false)
{
$return = false;
foreach ($this->_routes as $route) {
$this->setRoute($route);
$success = parent::match($path, $partial);
if (false !== $success) {
$return = $success;
break;
}
}
$this->setRoute(reset($this->_routes));
return $return;
}
public function setRoute($route)
{
$this->_route = trim($route, '/');
}
}
以这种方式添加新路由器:
$r = My_Route_ArrayStatic(array('about', 'abt'), $defaults);