使用MVC Foundation的动态路由-i18n和l10n

dmp*_*dmp 5 php model-view-controller routing url-rewriting internationalization

最近,我一直在提高Web编程的技能,以遵循更清晰,更可维护的MVC编码风格。但是,我过去经常使用自己的“自己动手”框架做的事情是基于mod_rewrite的灵活动态路由。这似乎是cakephp,zend等问题的一个严重问题,通过尝试复制我拥有的功能,这使我有些头疼。

在自己的环境中,您可以执行以下操作:

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

它将所有匹配的url重写为处理该url的任意脚本,将"/abc-123/abc-456/controller-value"etc 的组合解析为可从数据库表中设置的任何页面或动作,函数等列表,这些代码可能是硬编码的。等等。传递对服务器上存在的资源文件的匹配请求,或设置管理路由等。

但是,一旦启动MVC url策略,就很难用某种隐藏应用程序逻辑的方法来覆盖此行为。我从来没有真正理解为什么有人会向用户公开函数名,而这才是我真正的错误。从可用性和安全性的角度来看,这似乎是不必要的,而且过于严格。

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

要求:

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

娱乐时间!:D

范例网址:

/en/news/story-title
/pt/noticias/titulo
Run Code Online (Sandbox Code Playgroud)

网址根据传递的语言字符串检索本地化的内容。

Ign*_*s R 2

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