2015-10-14 73 views
0

我正在写一个简单的路由器上的PHP。而我面临的问题。例如,我有路线的数组,像这样:路由问题,PHP MVC

[ 
    '/' => [ 'url' => '/', 'method' => 'get', 'action' => '[email protected]' ] 
    'book/add' => ['url' => 'book/add', 'method' => 'get', 'action' => '[email protected]'] 
    'book/:id' => ['url' => 'book/:id', 'method' => 'get', 'action' => '[email protected]', 'params' => [':id']] 

] 

在我的路由器有这样的代码:

if(array_key_exists($searchPath, $routes)) { 
//... 
} 

$searchPath - 这是我的$_SERVER['REQUEST_URI']

$routes - 这是我的路线阵列。

如果在$searchPath将是book/add或'/' - 一切都会好起来的,我可以在我的阵列中找到路线并做一些事情。但如果在$searchPath将是book/1 - 我如何能够检测到我需要的路线(book/:id)?有人有一个想法?

+0

你可以做一个正则表达式解析'书/ '为'书/:ID ' – GGG

回答

0

好的,我找到了解决方案。我已经使用这个类:https://github.com/gpolguere/path-to-regexp-php

我的路线:

'book/:id' => ['url' => 'book/:id', 'method' => 'get', 'action' => '[email protected]', 'params' => [':id'], 'regexp' => \PathToRegexp::convert('book/:id')] 

查找路线:

foreach($this->routes as $route) 
    { 
     if(preg_match($route['regexp'], $_SERVER['REQUEST_URI'])) 
     { 
      $currentRoute = $route; 
      break; 
     } 
    }