2015-10-14 48 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; 
     } 
    }