我需要一种快速将url路由到Class-> Method()调用的方法,使用不编程每种情况的配置语法。
我有一个Web工具,它接受一个url并使用它来确定url引用的对象类,要使用的类方法以及该方法的参数。我正在使用.htaccess将所有请求传递给index.php,所以我从 $ _ SERVER ['PATH_INFO'] 读取路径并从那里过滤并将其展开以获取各个组件。
因此www.example.com/user/view/12345将创建一个用户控制器并调用将显示用户配置文件的视图功能。实际上,它会执行以下操作:
$url = explode("/",trim($_SERVER['PATH_INFO'],"/");
$class = $url[0] . "_Controller";
$page = new $class;
echo call_user_func_array(array($page, $url[1]), $url);
现在这是一个过于简单化的过程,这里没有显示很多其他移动部件,__ autoload(),页面模板系统等,但你明白了。网址为 domain_name / class / function / [arg1] / [arg2] / [arg3] / ... ,代码可以快速确定呈现网页所需的内容。
不幸的是,该网站需要匹配政策规定的api规则。根据政策,网址应该是:
domain_name / class / entityid / function_alias / [arg1] / [arg2] / [arg3] / ... 对于影响特定实体的工具
domain_name / class / function_alias / [arg1] / [arg2] / [arg3] / ... 对于未绑定到单个实体的工具
我已经解决了这个问题,但它很混乱。我没有在$ url [0]中为$ url [0]中的类调用函数并传递剩余的参数,而是从$ url [0]中确定对象类,实例化它,然后将url传递给对象的路线($ url)方法。从那里我有一个混乱的switch和if语句组合,将url转换为正确的类方法。
我需要的是某种配置文件或路由表,我可以在其中定义url的外观。我知道CMS有这样的事情。
"user/$1" => user/view/$1
"user/add" => user/add
"user/$1/edit" => user/edit/$1
"user/$1/key/$2" => user/edit_key/$1/$2
我需要的是一种语法和算法,它可以快速确定网址的实际目标类和方法,实例化它,并将必要的url值传递给它。
答案 0 :(得分:1)
可能存在可以读取某种配置文件的路由类,但我无法轻易找到。
这里有几个例子,或者人们在纯PHP中创建相对优雅的解决方案:
PHP Application URL Routing
http://blog.sosedoff.com/2009/07/04/simpe-php-url-routing-controller/
这些都适合您的需求吗?
当然,您也可以使用apache重写来完成这些重定向。