我試圖從一個URL數組獲取控制器,方法和查詢。事情是這樣的:URL正則表達式爲PHP框架
'首頁/新聞/ [天]/[月]/[塞] /'
我需要一些正則表達式,這將給我下面的:
控制器:家 方法:新聞 參數:天,月,slu 012
對於參數,如果我能以某種方式在括號內獲取名稱,那麼我可以將它們放入PHP中的關聯數組中。例如:(「day」=> $ day)。
我真的堅持這一點,並試圖尋找幾個PHP框架的指導,但沒有真正實現我想要的上面,特別是使用正則表達式。
我試圖從一個URL數組獲取控制器,方法和查詢。事情是這樣的:URL正則表達式爲PHP框架
'首頁/新聞/ [天]/[月]/[塞] /'
我需要一些正則表達式,這將給我下面的:
控制器:家 方法:新聞 參數:天,月,slu 012
對於參數,如果我能以某種方式在括號內獲取名稱,那麼我可以將它們放入PHP中的關聯數組中。例如:(「day」=> $ day)。
我真的堅持這一點,並試圖尋找幾個PHP框架的指導,但沒有真正實現我想要的上面,特別是使用正則表達式。
preg_match('{/home/news/(?<day>\d{1,2})/(?<month>\d{1,2})/(?<slug>[\w-]+)}',
'/home/news/10/02/foo',
$matches);
$matches
現在
array (
0 => '/home/news/10/02/foo',
'day' => '10',
1 => '10',
'month' => '02',
2 => '02',
'slug' => 'foo',
3 => 'foo',
)
天才,謝謝。 – Hanpan 2009-10-06 09:55:09
如果你總是將不得不/:控制器/:方法/:你還不如使用args來爆炸:
$args = explode('/', $url);
$controllerName = array_shift($args);
$method = array_shift($args);
$controller = new $controllerName;
$response = $controller->$method($args);
嗯,問題是我想先路由我的網址,因爲我可能還想要/:controller /:item_id或其他東西。考慮一下,我認爲最好的方法是將正則表達式和上面的方法結合起來。非常感謝您的回覆。 – Hanpan 2009-10-06 09:51:06
我想你應該將參數委託給「主」控制器甚至是「新聞」方法。這不應該是前端控制者的業務。除此之外,你認爲擁有「家庭」控制器是個好主意嗎? – middus 2009-10-06 08:41:50
感謝您的回覆。其實,家庭控制器只是一個例子,實際上它可能是新聞/文章/ 10/10/news-article-test /。 你是建議我只是採取所有的查詢,只是通過我的控制器很多? – Hanpan 2009-10-06 08:52:15