Zend框架路由

时间:2011-04-26 12:12:18

标签: zend-framework routing

我正在尝试为我的ZF应用设置一些路线,但不会太过分。我有一个控制器'WebServiceController',它有一个索引动作和一个lookupTransaction动作。我想使用这样的路线:

WS /

WS / lookupTransaction

理想情况下,我希望任何带有'ws /'前缀的内容都可以转到WebServiceController并匹配操作名称。我不知道该怎么做但是我想让每条路线都工作,所以我添加了这两条路线:

<?php

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{

    function _initRoutes()
    {
        $frontController = Zend_Controller_Front::getInstance();
        $router = $frontController->getRouter();

        $router->addRoute('ws', new Zend_Controller_Router_Route('ws/', array(
            'controller'    =>  'web-service',
            'action'        =>  'index',
        )));

        $router->addRoute('ws/lookupTransaction', new Zend_Controller_Router_Route('ws/lookupTransaction', array(
            'controller'    =>  'web-service',
            'action'        =>  'lookup-transaction',
        )));
    }

}

第一个按预期工作,但第二个没有,我只是得到'应用程序错误'。我究竟做错了什么?只是出于兴趣,如果我删除了我的两条路线并试着去:

web的服务/查找事务

我仍然得到同样的错误!

解决

以下是我如何使用驼峰式动作名称和驼峰式网址。

$router->addRoute('ws', new Zend_Controller_Router_Route('ws/:action', array(
    'controller'    =>  'web-service',
    'action'        =>  'index',
)));
$router->addRoute('ws-lookupTransaction', new Zend_Controller_Router_Route('ws/lookupTransaction', array(
    'controller'    =>  'web-service',
    'action'        =>  'lookup-transaction',
)));

由于

齐亚德

2 个答案:

答案 0 :(得分:0)

尝试这一条路线作为两个问题的解决方案:

$router->addRoute('ws', new Zend_Controller_Router_Route('ws/:action', array(
    'controller'    =>  'web-service',
    'action'        =>  'index',
)));

然后将action参数用作默认值,因此如果URL中未指定任何操作,则将使用index。否则它将路由到URL中的操作。因此,example.com/ws/lookupTransaction将转到您控制器中的lookuptransactionAction()

如果仍然出现错误,请发布错误消息,以便我们查看问题所在。

答案 1 :(得分:0)

路由器实际上将URL转换为小写。因此,正确的URL应该是全部小写的破折号分隔的单词。另外我不确定是否可以在路由名称中使用斜杠(addRoute()的第一个参数)。