【问题标题】:Dynamic Routing with an MVC Foundation - i18n and l10n使用 MVC 基础的动态路由 - i18n 和 l10n
【发布时间】:2015-02-14 05:08:37
【问题描述】:

我最近一直在提高自己的 Web 编程技能,以遵循更理智、更易于维护的 MVC 编码风格。然而,我曾经用我的“自己动手”框架做的一件事是基于 mod_rewrite 的灵活动态路由。对于像 cakephp、zend 等这样的东西,这似乎是一个令人头疼的问题。它试图复制我拥有的功能,这让我有些头疼。

在您自己的上下文中,您可以执行以下操作:

<custom htaccess rules before>
RewriteRule    ^([A-Za-z0-9-/]+)$    index.php?q=$1   [NC,L]

它将所有匹配的 url 重写为处理 url 的任意脚本,将"/abc-123/abc-456/controller-value" 等的组合解析为可以从数据库表中设置的任何页面或操作、函数等列表,硬编码,bla bla。 . 之前的自定义规则可以通过对服务器上资源存在的文件的匹配请求,或者设置管理路由等。

但是,一旦 MVC url 策略开始生效,就很难用对外界隐藏应用程序逻辑的东西来覆盖此行为。我从来没有真正理解为什么有人想要向用户公开函数名称,这是我真正的问题。从可用性和安全性的角度来看,这似乎是不必要的,而且太过分了。

所以 - 问题是,如何在为应用程序保持坚实的 MVC 基础的同时实现重写、可翻译和友好的 url 策略?

要求:

  • 没有公开应用逻辑
  • 可翻译的网址 (i18n)
  • 无需接触应用程序代码即可动态添加、删除、编辑网址或页面

欢乐时光! :D

示例网址:

/en/news/story-title
/pt/noticias/titulo

url 根据传递的语言字符串检索本地化内容的位置。

【问题讨论】:

  • 当您说“可翻译的 URL”时,您是指有多个 URL 可以检索完全相同的内容吗?这将导致搜索引擎看到重复的内容。需要注意的事情。
  • 翻译后的 url 将检索特定于与该 URL 关联的语言的内容。例如,/en/news /pt/noticias 抱歉,如果不清楚,我认为这是不言而喻的。

标签: php model-view-controller routing url-rewriting internationalization


【解决方案1】:

MVC 只是一种架构模式,与 URL 结构无关。使用自定义路由层不会以任何方式破坏 MVC。如果集中式路由适合您,那么,例如,您可以有一个配置文件,将 URL 模式(正则表达式或某种简化语法)映射到控制器操作。

【讨论】:

  • 是的,但问题是,如果这样的框架已经存在,或者它是否总是要从头开始实现它。翻译后的网址对我来说很重要。
  • 另外,一般来说MVC结构总是反映在URL中,我觉得这很烦人,所以这两件事是密切相关的。
  • 经过一番研究,似乎自定义路由层是唯一真正的前进方式,但是将这个路由层放在另一个路由层之上有点疯狂,只是为了控制一个 URL .
【解决方案2】:

我相信(虽然我不确定)Akelos 支持可翻译的网址。

【讨论】:

    【解决方案3】:

    既然您似乎在推出自己的 MVC,那么是什么阻止您做自己想做的事?事实上,我自己在自己的小型 MVP 框架中这样做。

    我只是使用域之后的第一个段来加载同名的控制器(演示者),然后将剩余的段和查询字符串作为数组传递给它。然后由每个控制器决定如何处理这些。减去 i18n 的东西 - 我在半全球范围内处理。

    【讨论】:

      猜你喜欢
      • 2021-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-13
      • 2011-05-31
      • 2016-01-06
      • 2010-09-22
      • 1970-01-01
      相关资源
      最近更新 更多