【问题标题】:Zend Framework routingZend 框架路由
【发布时间】:2011-04-26 12:12:18
【问题描述】:

我正在尝试为我的 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',
        )));
    }

}

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

网络服务/查找交易

我仍然遇到同样的错误!

已解决

这是我如何使它与驼峰大小写的动作名称和驼峰大小写 URL 一起使用。

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

谢谢

齐亚德

【问题讨论】:

  • 你的WebServiceController有lookupTransactionAction吗?
  • BTW 您可以打开错误日志并检查日志以了解具体原因(可能是您已定义操作但尚未在视图上定义视图/禁用渲染,这将引发例外)。
  • 谢谢wimvds,我确实有这个动作,但我没有正确设置环境,所以没有收到完整的错误消息,现在已经修复了。
  • 只是想知道:用实际的控制器名称和操作名称而不是 url 的版本配置自定义路由不是更有意义吗?

标签: zend-framework routing


【解决方案1】:

尝试这一种方法来解决这两个问题:

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

action 参数作为默认值,所以如果 URL 中没有指定 action,将使用 index。否则它将路由到 URL 中的操作。所以example.com/ws/lookupTransaction 将转到您的控制器中的lookuptransactionAction()

如果这仍然给您一个错误,请发布错误消息,以便我们查看问题所在。

【讨论】:

  • 谢谢蒂姆。现在 'ws/' 解析为写入控制器/动作,但 'ws/lookup-transaction' 和 'ws/lookupTransaction' 都不起作用。我在控制器中创建了另一个名为“test”的操作,并且“ws/test”工作正常,因此 ZF 如何处理驼峰式操作似乎存在一些问题。因此,您的解决方案适合我的一般情况,但我需要弄清楚如何正确执行驼峰式操作。
  • 这里有一个快速参考:papayasoft.com/2010/12/22/… 这样一来,lookuptransactionAction() 应该是正确的方法名称。无论哪种方式,错误消息都应该包含它正在寻找的方法。
  • 好的,首先我犯了一个愚蠢的错误,我有一个名为lookup_transaction.phtml而不是lookup-transaction.phtml的视图,我的设置错误,所以它没有显示原因失败,所以现在我修复了它并且它可以工作(顺便说一句,我如何将 ZF 配置为使用 _ 而不是 - 用于视图?)。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-20
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多