我正在尝试将url路由实现到我自己的mvc框架中,我想找到最好的方法来实现它。我在考虑三种解决方案。
我对#1和#2的关注是我必须为每次访问读取一个表或xml。 我对#3的关注是并非所有托管公司都支持memcache。
任何建议都将不胜感激!
补充:我觉得我困惑了一些人。通过“路线”,我实际上是在谈论改写...就像...我想在访问'/ hello'时将访问者重写为'/ controller / action'
由于
答案 0 :(得分:2)
我不会为此使用XML或表。这将需要额外的资源用于这种(相比较的)简单操作。你应该有一个由mod_rewrite加载的脚本,它解析URL,加载适当的控制器并执行动作。
答案 1 :(得分:0)
嘿,我知道这有点晚了,但请查看我的Routes class。我知道你现在可能不需要它,但希望它对其他人仍然有用。
通过这种方式,您可以使用简单的语法和规则轻松完成所需的操作。您所需要的只是分解返回的URL的部分(来自Routes::route()
调用)以计算您的控制器和操作方法(以及任何可能的参数)。
此路由库不会为您执行此操作的原因是因为您在使用它时可能不在MVC世界中,但创建起来并不困难。因为它是如此低级别,你甚至可以动态创建路由,比如从数据库表或内存缓存。
答案 2 :(得分:0)
我想我可以重新分阶段甚至概括这个问题:
所以你应该瞄准:
这将使我使用以下类和方法实现解决方案:
Router :: addRoute(pattern,controller) - 添加路由 Router :: match(uri) - 返回匹配的控制器
您可以以您想要的任何格式存储路径(XML,Json,在数据库中),并生成一个简单的PHP包含文件,以便在运行时快速加载路由:
<?php
// compiled_routes.php
$router = new Router();
$router->addRoute('/', 'HomeController');
$router->addRoute('/widgets', 'WidgetsController');
tl; dr:将路由规则解析与路由匹配分开。仅执行一次规则解析,并将结果编译为可由APC缓存的PHP代码。
希望有所帮助。