Zend和addRoute()的问题

时间:2010-12-16 02:45:13

标签: 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(
            'controller' => 'admin'
        )
    )
);

http://app/test/param1/param2/param3 - >行

http://app/test/param1/param2/ - > FAIL

在第二种情况下,应用程序无法识别param2。

似乎应用程序需要param3才能读取param2 ...

我该怎么做?

谢谢!


使用@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+'
        )
    )
);

http://app/test/ - >行

http://app/test/some - >行

http://app/test/some/more - > FAIL

http://app/test/some/more/andmore - >行

想法?

2 个答案:

答案 0 :(得分:1)

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

$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是一个整数。

答案 1 :(得分:1)

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

$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+'
        )
    )
);

刚刚在一些测试项目中试过你的代码并修复它希望它适合你!