我更喜欢使用reg
ex而不是制作自己的格式,因为这是常识。我写了一个小类,使我可以嵌套这些正则表达式路由表。我曾经使用过类似的通过继承实现的方法,但是它不需要继承,因此我重写了它。
我对一个键进行正则表达式,然后映射到我自己的控制字符串。请看下面的例子。我访问了
/api/related/joe我的路由器类,创建了一个新对象
ApiController并调用它的方法
relateddocuments(array('tags'=> 'joe'));
// the 12 strips the subdirectory my app is running in$index = urldepre(substr($_SERVER["REQUEST_URI"], 12));Route::process($index, array( "#^api/related/(.*)$#Di" => "ApiController/relateddocuments/tags", "#^thread/(.*)/post$#Di" => "ThreadController/post/title", "#^thread/(.*)/reply$#Di" => "ThreadController/reply/title", "#^thread/(.*)$#Di" => "ThreadController/thread/title", "#^ajax/tag/(.*)/(.*)$#Di" => "TagController/add/id/tags", "#^ajax/reply/(.*)/post$#Di"=> "ThreadController/ajaxPost/id", "#^ajax/reply/(.*)$#Di" => "ArticleController/newReply/id", "#^ajax/toggle/(.*)$#Di" => "ApiController/toggle/toggle", "#^$#Di" => "HomeController",));
为了减少错误并简化 *** 作,您可以细分表。这样,您可以将路由表放入它控制的类中。以上面的示例为例,您可以将三个线程调用合并为一个。
Route::process($index, array( "#^api/related/(.*)$#Di" => "ApiController/relateddocuments/tags", "#^thread/(.*)$#Di" => "ThreadController/route/uri", "#^ajax/tag/(.*)/(.*)$#Di" => "TagController/add/id/tags", "#^ajax/reply/(.*)/post$#Di"=> "ThreadController/ajaxPost/id", "#^ajax/reply/(.*)$#Di" => "ArticleController/newReply/id", "#^ajax/toggle/(.*)$#Di" => "ApiController/toggle/toggle", "#^$#Di" => "HomeController",));
然后定义ThreadController :: route就像这样。
function route($args) { Route::process($args['uri'], array( "#^(.*)/post$#Di" => "ThreadController/post/title", "#^(.*)/reply$#Di" => "ThreadController/reply/title", "#^(.*)$#Di" => "ThreadController/thread/title", ));}
您也可以在右侧为路由字符串定义任何默认值。只是不要忘了将它们记录下来,否则您将使人们感到困惑。如果您在右侧未包含函数名称,则当前正在调用索引。这是我当前的代码。您可能需要更改它以处理您喜欢的错误和/或默认 *** 作。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)