0

我想要一些对我来说听起来相当简单但似乎不是的东西。

我的问题是我的应用程序需要 2 条路线:

每当模块是管理员时,应用以下路由:

$router->addRoute(
            'backend',
            new Zend_Controller_Router_Route('/:module/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => ':id', 'value' => ':value'))
        );

效果很好。一个示例 url 可以是:http://localhost/server/domains/demo/admin/images/album/3其中 admin 是模块,图像是控制器等等。

我想要的是,当用户访问时,http://localhost/server/domains/demo他会被重定向到default module,index controllerindex action. 之后的所有demo/内容都应被视为单个参数(/可能未知)。

我尝试了几件事,从使用Route_Regex,尝试(.*)(\d+),我在网上找到的东西。尝试切换值,使它们成为静态,打开/关闭removeDefaultRouter,但没有任何效果。下面你可以看到我当前的引导程序。有任何想法吗?

$router = $this->frontController->getRouter();
    $router->removeDefaultRoutes();
    $router->addRoute(
        'backend',
        new Zend_Controller_Router_Route('/admin/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => ':id', 'value' => ':value'))
    );

    $router->addRoute(
        'frontend',
        new Zend_Controller_Router_Route('/default/:controller/:action/(.*)', array('module' => 'default', 'controller' => 'index', 'action' => 'index'))
    );

后端工作正常,但是当http://localhost/server/domains/demo/我收到以下错误时:No route matched the request

当给出答案时,请解释原因,因为 Zend_Route 对我来说总是有点模糊。提前致谢!

临时修复

在我使用的临时修复程序下方。它完全按照我的意愿工作,但我仍然相信 Zend_Route 可以实现同样的效果,而无需检查模块是否为管理员。

$router = $this->frontController->getRouter();
    $uri = explode('demo/', $_SERVER['REQUEST_URI']);
    $uri = (isset($uri[1])) ? explode('/', $uri[1]) : $uri[0];
    if($uri[0] == 'admin')
    {
        $route = new Zend_Controller_Router_Route('/:module/:controller/:action/:id/:value', array('module' => 'admin', 'controller' => 'dashboard', 'action' => 'index', 'id' => null, 'value' => null));
        $router->addRoute('router', $route);
    }
    else
    {
        $route = new Zend_Controller_Router_Route('/*', array('module' => 'default', 'controller' => 'index', 'action' => 'index'));
        $router->addRoute('router', $route);
    }
4

1 回答 1

0

如果你真的必须使用这条路线,那是值得的。对于正常使用,您可以通过以下方式生成链接

Zend_Layout::getMvcInstance()->getView()->Url(array('module' => 'admin'));
Zend_Layout::getMvcInstance()->getView()->Url(array('module' => 'default'));

等等。


如果您对此不满意,请尝试路由链接:

    $router = Zend_Controller_Front::getInstance()->getRouter();

    $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
    $request = Zend_Controller_Front::getInstance()->getRequest();
    $frontRoute = new Zend_Controller_Router_Route_Module(array(), $dispatcher, $request);
    $backRoute = new Zend_Controller_Router_Route_Module(array('module' => 'admin'), $dispatcher, $request);

    $route = new Zend_Controller_Router_Route('admin');
    $router->addRoute('backend', $route->chain($backRoute));

    $route = new Zend_Controller_Router_Route('default');
    $router->addRoute('frontend', $route->chain($frontRoute));


说明:
Zend_Controller_Router_Route_Module用于定义应用程序的模块路由。通过将其链接到正常路由,就像new Zend_Controller_Router_Route('admin')您创建 /admin/[your_module_route] 之类的链接,其中 [your_module_route] 定义了默认值array('module' => 'admin')并且也可以采用其他参数。

new Zend_Controller_Router_Route_Module(array(), $dispatcher, $request);被定义为标准路由器上的默认路由。

于 2012-08-21T15:21:36.263 回答