cakephp - 为CakePHP中的每个URL添加一个前缀

标签 cakephp routing prefix

向CakePHP中的每个URL添加前缀(如语言参数)的最干净方法是什么?

http://example.com/en/controller/action
http://example.com/ru/admin/controller/action

它需要使用像admin这样的“真实”前缀,并且理想情况下,裸URL /controller/action可以重定向到/DEFAULT-LANGUAGE/controller/action

现在,它正在为我 retrofit 的应用程序中工作,但这有点像hack,我需要在大多数链接中手动添加language参数,这不好。

因此,问题是双重的:
  • 构造路由的最佳方法是什么,因此默认情况下隐式包括language参数,而不必为每个新定义的Route指定该参数?
  • Router::connect('/:controller/:action/*', ...)应该隐式包含前缀。
  • 该参数应该在$this->params['lang']中可用,或者在AppController::beforeFilter()中类似的地方可用。
  • 如果未明确指定,如何获取Router::url()以自动在URL中包含前缀?
  • Router::url(array('controller' => 'foo', 'action' => 'bar'))应该返回/en/foo/bar
  • 由于Controller::redirect()Form::create()或什至Router::url()直接需要具有相同的行为,因此覆盖每个单独的函数并不是真正的选择。例如,Html::image()应该产生一个无前缀的URL。


  • 以下方法似乎调用Router::url
  • Controller::redirect
  • Controller::flash
  • 通过Dispatcher::__extractParams Object::requestAction
  • Helper::url
  • JsHelper::load_
  • JsHelper::redirect_
  • View::uuid,但仅适用于哈希生成

  • 在这些看来,Controller和Helper方法似乎需要重写,我可以不用JsHelper来生活。我的想法是用AppController或可能只用bootstrap.php写一个通用函数来处理参数插入。被覆盖的Controller和Helper方法将使用此功能,如果我想手动调用Router::url也会使用该功能。这样就足够了吗?

    最佳答案

    IRC的rchavik建议使用此链接:CakePHP URL based language switching for i18n and l10n internationalization and localization

    通常,解决方案可能是重写Helper::url

    关于cakephp - 为CakePHP中的每个URL添加一个前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1794412/

    相关文章:

    php - CakePdf 生成奇怪的代码而不是 pdf

    .net-4.0 - 任何人都可以在 .NET 4.0/MVC3 中重新创建我在具有 2 个或更多可选参数的路由中遇到的以下错误吗?

    c++ - i++ 比++i 效率低,如何显示?

    r - 如何将存储在列表中的数据框名称放入每个数据框的列名中?

    php - cakephp 图像助手在本地工作但不在线

    php - Qcodo vs. CakePHP vs. Zend

    php - 设置 cakephp 的默认值

    asp.net-mvc - 我应该如何在 Mvc 5 中路由 POST 和 GET

    asp.net - 在 IHTTPHandler 中以编程方式创建 System.Web.UI.Page

    forms - 为什么表单 id 前缀在 h :message output?