Zend framework Zend和addRoute()的问题

Zend framework Zend和addRoute()的问题,zend-framework,zend-route,Zend Framework,Zend Route,使用此代码: $frontController = Zend_Controller_Front::getInstance(); $router = $frontController->getRouter(); $router->addRoute( 'test', new Zend_Controller_Router_Route( '/test/:action/:type/:id', array( 'contro

使用此代码:

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter();
$router->addRoute(
    'test',
    new Zend_Controller_Router_Route(
        '/test/:action/:type/:id',
        array(
            'controller' => 'admin'
        )
    )
);
->好的

->失败

在第二种情况下,应用程序不识别param2

应用程序似乎需要参数3才能读取参数2

我怎么做

谢谢


使用@RageZ中的代码进行测试

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter();
$router->addRoute(
    'test',
    new Zend_Controller_Router_Route(
        '/test/:action/:type/:id',
        array(
            'controller' => 'admin',
            'id' => 0
        ),
        array(
            'id' => '\d+'
        )
    )
);
->好的

->好的

->失败

->好的


想法?

如果参数是可选的,则必须提供默认值

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter();
$router->addRoute(
    'test',
    new Zend_Controller_Router_Route(
        '/test/:action/:type/:id',
        array(
            'controller' => 'admin',
            'id' => 0
        ),
        array(
            'id' => '\d+'
        )
    )
);

与您的问题无关,但使用addRoute的第三个参数是一种很好的做法。Zend Framework将验证参数值是否与您指定的格式匹配,在这种情况下,我假设id是一个整数

尝试为所有内容提供默认值

$frontController = Zend_Controller_Front::getInstance(); 
$router = $frontController->getRouter();
$router->addRoute(
    'test',
    new Zend_Controller_Router_Route(
        '/test/:action/:type/:id',
        array(
            'controller' => 'admin',
            'action' => 'index',
            'type' => 'sometype',
            'id' => 0
        ),
        array(
            'id' => '\d+'
        )
    )
);

刚刚在某个测试项目中尝试了你的代码,这修复了它,希望它能为你工作

@joanballester:由您决定是否需要默认值并指定格式。在你的情况下,两个url都会起作用,我很抱歉,但是。。。我不能!我将继续尝试(我已经编辑了帖子)@joanballester:让我设置一个虚拟应用程序来测试最后一个代码缺少类型的默认值…;)