【问题标题】:Zend Framework Zend_Controller_Router_Route (catch all controllers before routing param)Zend Framework Zend_Controller_Router_Route(在路由参数之前捕获所有控制器)
【发布时间】:2010-12-09 14:46:44
【问题描述】:

我很抱歉这个问题的标题不是很具描述性,但事实是我不太确定这个问题的正确术语是什么。我是使用 Zend 框架的新手。

想象一下这个网址:www.foo.com/bar 下面的代码采用“bar”并将其传递给索引控制器的加载操作。但是,我有另一个名为“mypresentation”的控制器,现在下面的路由器已被添加到引导程序中,它被忽略了。

$route = new Zend_Controller_Router_Route(
    '/:prospect',
    array('controller'=>'index', 'action' => 'load'));

$router->addRoute('load', $route);

如何让路由器忽略硬编码控制器?

非常感谢任何帮助,如果可以的话,我会在有更多信息时更改标题。

亚历克斯。

修复:

$prospectRoute = new Zend_Controller_Router_Route(
    '/:prospect',
    array('controller'=>'index', 'action' => 'load')
);

$route2 = new Zend_Controller_Router_Route(
    'mypresentation',                        
     array('controller' => 'mypresentation') 
);

$router->addRoute('index', $prospectRoute);
$router->addRoute('mypresentation', $route2);      

【问题讨论】:

  • 所以你想要默认路由+这个自定义路由(作为基本的包罗万象)?问题是您定义的路由首先拦截了所有'/whatever'...也许可以在检查默认路由后链接到匹配。
  • 我已经尝试让它在默认值之后匹配,但没有运气。不过你明白这个问题:)

标签: php zend-framework routing


【解决方案1】:

在此之前添加另一个路由,以首先捕获到 mypresentation 控制器的任何路由。它按顺序遍历路线,直到找到匹配的第一个。

$route2 = new Zend_Controller_Router_Route(
    'mypresentation',                        // what's typed in URL
     array('controller' => 'mypresentation') // send here
);

$router->addRoute('mypresentation', $route2);
$router->addRoute('load', $route);           // Your original route

如果要捕获所有控制器,请使用

$route3 = new Zend_Controller_Router_Route(
    ':controller',                       
     array('controller' => ':controller')
);

【讨论】:

  • 我想我想抓住所有的控制器,所以你的第三个例子是我在我之后的代码和 $router->addRoute('index', $route3) 之前的代码最初发布并没有改变结果。
  • 谢谢 :) 这最终帮助了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
相关资源
最近更新 更多