【问题标题】:Zend Framework Routing ForwardZend 框架路由转发
【发布时间】:2015-11-04 23:10:48
【问题描述】:

我有一个旧网址“/report/details/”,现在我想将此网址更改为“/customer_report/details”。控制器名称为reportController,动作为detailsAction。

我设置了 routes.ini 并添加了以下内容:

routes.report.route = /customer_report/details/
routes.report.defaults.controller = report
routes.report.defaults.action = details

在编辑完 routes.ini 后,如果我使用 url '/cutomer_report/details',它可以完美运行。但是,如果我输入 url '/report/details/',它仍然有效。

有什么方法可以控制每当 url 为 /report/details 时,它会自动重定向到 /customer_report/details?

PS。我正在使用 Zend Framework v1.12

【问题讨论】:

  • 显而易见的答案是重构将report 控制器重命名为customer_report。当你实现这一点时,你可以删除自定义路由。
  • 一个不太明显的答案是添加一个控制器插件,用于监听是否正在使用旧 URL,然后将其 404 或 300 重定向到新路由。

标签: php zend-framework


【解决方案1】:

如果不知道您拥有什么 ZF 版本,很难回答。 ZFv1 具有预定义的路由,例如 /:controller/:action,这就是为什么您的 /report/details 路由可能仍然有效的原因。您可以更改此默认行为以清除默认路由:

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$router->removeDefaultRoutes(); 
$router->addRoute(
   'error', 
    new Zend_Controller_Router_Route (
       '/customer_report/details/',
       array (
          'controller' => 'report',
          'action' => 'details'
       )
    )
);

如果你想重定向用户,你可以将你的逻辑移动到一个新的动作:

public function customerReportAction() {
    // logic from reportAction()
}

并在旧版本中添加http重定向:

public function reportAction() {
   $this->_redirect('/customer_report/details/');
}

【讨论】:

  • 感谢您的回答。是否可以仅删除此路由的默认路由?因为我有其他使用默认路由的控制器和操作
  • 其实我的问题不是关于删除默认路由。我仍然想保持 /report/details 可用,但以不同的方式。当使用 /report/details 时,我想将其重定向到 '/cutomer_report/details' url。
  • 在你的报告动作中,检查匹配路由的名称,如果不是report则重定向
  • 谢谢@i.ovchynnikov 这行​​得通,只是好奇,你有更好的黑客解决方案吗,因为我必须更改很多旧网址,并且制作许多新的控制器模块将使项目更复杂。
  • @StanleyLi 最方便的解决方案是创建指向旧路线的新路线。但是如果你想在客户端有一个“重定向效果”,考虑这个例子:stackoverflow.com/a/11416754/2180005
猜你喜欢
  • 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
相关资源
最近更新 更多