2014-05-13 49 views
1

我正在使用Laravel 4.1。所以,我想用這個結構來創建網址:使用domain.tld /的MacBook PRO-2389,並使用這條路線:從slu Get中獲取ID Laravel 4

Route::get('{sc}-{id}', '[email protected]') 
    ->where('id', '\d+'); 

但問題時,塞包含多個劃線我不能得到完全的ID。

我該怎麼做,並保持相同的結構?

編輯

我確實到現在爲止唯一的解決辦法是與此正則表達式([a-z0-9\-]+)\-([0-9]+)驗證整個塞,然後我爆炸蛞蝓得到這樣的最後一個項目:

$id = explode('-', $slug); 
$id = end($id); 

Route::get('{slug}', function($slug){ 

$id = explode('-', $slug); 

// 2389 
$idOnly = array_pop($id); 

// macbook-pro 
$nameDashes = implode('-', $id); 

// It is possible to pass $idOnly and $nameDashes to `[email protected]` ? 

}) 
->where('slug', '([a-z0-9\-]+)\-([0-9]+)'); 
+0

你不能,不會產生正則表達式,這將讓你從'id'字符串只有數字,但是這將是困難的,如果你有個數字在你的蛞蝓 –

+0

唯一的解決辦法我到現在爲止是用這個正則表達式'([a-z0-9 \ - ] +)\ - ([0-9] +)'來驗證整個slu and,然後我爆炸這個slu to以獲得像這樣的最後一個項目: '$ id = explode(' - ',$ slug);' '$ id = end($ id);' –

回答

0

你可以通過定義sc以及id解決這個問題:

Route::get(
    '{sc}-{id}', 
    function($sc, $id) { 
     var_dump($sc); 
     var_dump($id); 
     exit; 
    } 
) 
    ->where('sc', '.*?') 
    ->where('id', '\d+'); 

在這種情況下,我lazily match任何數量的字符。由於它是懶惰的,它會一直走到它看到-後面跟着1+數字。

這結束了parsing a regular expression similar to

^  (?# start of URL) 
(.*?) (?# capture sc) 
-  (?# delimiter) 
(\d+) (?# capture id) 
$  (?# end of URL) 
+0

這就是我在找的東西,謝謝了很多@Sam –

+0

沒問題,歡呼聲。 – Sam