具有多语言支持的PHP路由
我目前正在框架上创建CMS.我制作了我的.htaccess文件,看起来像这样:
<IfModule mod_rewrite.c> RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^([A-Za-z]+)/(.*)$index.php?url=$1 [PT,L] </IfModule> 我的问题是: 1)可以使用普通的MVC URL访问我的页面: 2)我的页面也可以通过路线访问: 我真正需要实现的是我可以通过两种方式访问??它: 我的问题是我不想更改mod_rewrite – 我更想在PHP中创建路由,但是我找不到如何在没有静态的情况下路由到PageController-> view()方法的解决方案条件中的字母(上例中的“p”). 你明白我的问题吗? 解决方法
这听起来像你需要实现某种路由器.
我亲自面对它,这就是我使它工作得很好的方式: 某些路由器类解析URL.它将URL部分(/ en / controller / action / param1 / paramval1 /)分解为多个部分.它确定语言代码(如果未提供,则为默认值),控制器,操作等. 现在系统的不同部分可以通过Router或Request类访问给定的信息.从这里开始,应该很容易实现多语言网站. 再一次,重要的部分是将URL映射到控制器和操作.当然,如果你不想像/ controller / action / parameter1这样的URL,你应该有一些映射表(XML文档/数据库表),它将存根(页面短标记)映射到控制器和动作.路由器读取此表并根据给定规则确定控制器,操作和其他参数. 希望我没有太多复杂:) 更新: 至于我自己,我已经用XML文件实现了映射.让我进一步解释一下:路由器负责解析URL.通常,您的URL将包含控制器和操作名称(在您的情况下,页面是控制器,视图是操作). 现在,在您的情况下,您只需要一个存根,因此路由器必须以某种方式获取有关正在调用哪个控制器和操作的信息.这是映射的目的,将存根映射到适当的控制器和操作. 我已将其实现为静态路由,手动编写到XML文件中,但您可以使用某种插件类来检查存根是否实际与页面相关.如果没有,那可能意味着两件事:它是控制器或请求无效. 让我进一步讨论冲突:如果存根与任何控制器的名称相同,则会发生冲突.您是否应该使用给定存根渲染页面,或者调用控制器?这必须以某种方式解决,也许您可??以以编程方式限制用户拥有具有这种存根的页面. 此外,下次您使用PHP深入了解应用程序开发时,我建议您使用一些众所周知的PHP框架(如果您还没有使用,那么),例如,Zend,Kohana或CodeIgniter.它们都提供路由器和许多其他组件,使开发应用程序更容易,更快速,更安全. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |