0

使用此代码:

$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/ -> 失败

在第二种情况下,应用程序无法识别 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 -> 失败

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

想法?

4

2 回答 2

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

于 2010-12-16T02:46:57.317 回答
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+'
        )
    )
);

刚刚在一些测试项目中尝试了你的代码,这修复了它希望它对你有用!

于 2010-12-16T04:03:15.803 回答