【问题标题】:Zend Framework Redirect and Routes, somehow not workingZend 框架重定向和路由,不知何故不起作用
【发布时间】:2012-04-25 07:29:12
【问题描述】:

我一直在努力解决路由问题,因此构建了一个小应用程序来摆弄,但我设法偶然发现了一个问题。

整个测试的目标是隐藏 url 'hostname/content/index/add' 并将其变成更易于用户理解的 url,例如 'hostname/wms/content/add'。

但现在由于某些奇怪的原因,我无法使用 $this->url() 方法进行重定向。但不知何故,像 somelink 这样的正常链接可以正常工作。

我在 application.ini 中构建了一些路由来测试它是如何工作的。没什么好看的……

resources.router.routes.contentroute.route = "/wms/content"
resources.router.routes.contentroute.defaults.module = content
resources.router.routes.contentroute.defaults.controller = index
resources.router.routes.contentroute.defaults.action = index

resources.router.routes.vacaturesroute.route = "/wms/vacatures"
resources.router.routes.vacaturesroute.defaults.module = vacatures
resources.router.routes.vacaturesroute.defaults.controller = index
resources.router.routes.vacaturesroute.defaults.action = index

所以当我输入主机名/wms/content 时,我会被重定向到内容模块的 IndexController,它是 IndexAction。这适用于我的视图中指向这样的内容模块的所有链接

<a href='wms/content/'> link </a>

但是,它不适用于 3 个链接,这些链接实际上重定向到该页面主机名/wms/内容上的 IndexController 的特定操作。

<a href="<?php echo $this->url(array('controller'=>'index','action'=>'add'));?>">Add new content</a>

我并没有真正重定向到 IndexController 中的添加操作,而是重定向到主机名/wms/内容,这就是我来自的页面。

有人知道为什么会发生这种情况并可能有解决方法吗?还是我完全走错了路?

【问题讨论】:

    标签: zend-framework redirect routing


    【解决方案1】:

    首先,您的路线是静态路线。您应该将它们替换为:

    resources.router.routes.contentroute.route = "/wms/content/:action/*"
    resources.router.routes.contentroute.defaults.module = content
    resources.router.routes.contentroute.defaults.controller = index
    resources.router.routes.contentroute.defaults.action = index
    

    然后,您应该指定路由的名称并在 reset 参数中传递 true:

    $this->url(
      array('module'=>'content', 'controller'=>'index','action'=>'add'), 
      'contentroute', 
      true
    );
    

    【讨论】:

    • 非常感谢!这确实解决了这个问题。我不知道需要将 '/:action/*' 添加到路由中,或者需要指定路由本身。
    【解决方案2】:

    试试这个

    <a href="<?php echo $this->url(array('controller'=>'index','action'=>'add','module'=>'xyz'),null,true);?>">Add new content</a>
    

    将 xyz 替换为您的模块名称。

    【讨论】:

    • 如果在name参数中传入null,则采用默认路由。
    • @Maxence 路由没有为此 url 定义,请检查 op 发布的配置。
    • 你是对的。我认为他的配置是错误的,但你的答案在这种情况下有效。对不起。
    • 你的答案确实也有效,你我更喜欢 Maxence 给出的答案,因为我将在完成的应用程序中使用多个路由和链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-15
    • 1970-01-01
    • 2015-06-23
    • 1970-01-01
    相关资源
    最近更新 更多