我是laravel的新手,我非常努力地理解如何傳遞多個可選的url參數。Laravel 4:如何傳遞多個可選參數
將3個可選參數傳遞給控制器時,對路徑進行編碼的標準方法是什麼?
也有一種方法來編碼路線,以允許命名參數傳遞給控制器嗎?
如
public/test/id=1&page=2&opt=1
or
public/test/id=1/page=2/opt=1
感謝所有幫助
我是laravel的新手,我非常努力地理解如何傳遞多個可選的url參數。Laravel 4:如何傳遞多個可選參數
將3個可選參數傳遞給控制器時,對路徑進行編碼的標準方法是什麼?
也有一種方法來編碼路線,以允許命名參數傳遞給控制器嗎?
如
public/test/id=1&page=2&opt=1
or
public/test/id=1/page=2/opt=1
感謝所有幫助
如果您有多個可選參數
Route::get('test',array('as'=>'test','uses'=>'[email protected]'));
而且你的控制器內
class HomeController extends BaseController {
public function index()
{
// for example public/test/id=1&page=2&opt=1
if(Input::has('id'))
echo Input::get('id'); // print 1
if(Input::has('page'))
echo Input::get('page'); // print 2
//...
}
}
命名參數通常爲航段,但沒有明確的命名完成。因此,例如,你可以Ø是這樣的:
Route:get('test/{id?}/{page?}/{opt?}', function ($id = null, $page = null, $opt = null) {
// do something
});
$id
,$page
和$opt
都是可選的位置,通過在段定義?
,他們必須在功能默認值的事實來定義,和。然而,你會發現有問題的東西在這裏:
$opt
是真正可選的,$page
必須如果$opt
供應,並$id
絕如果$page
是這是由Laravel將命名段映射到函數/方法參數的方式帶來的限制。理論上你就可以實現你自己的邏輯來完成這項工作,但是:
Route:get('test/{first?}/{second?}/{third?}', function ($first = null, $second = null, $third = null) {
if ($first) {
list($name, $value) = @explode('=', $first, 2);
$$name = $value;
}
if ($second) {
list($name, $value) = @explode('=', $second, 2);
$$name = $value;
}
if ($third) {
list($name, $value) = @explode('=', $third, 2);
$$name = $value;
}
// you should now have $id, $page and $opt defined if they were specified in the segments
});
不,這是一個很天真的解決方案,通過=
依靠盲目的爆炸,以及設置任意輸入的變量的名稱(這顯然是要求麻煩)。你應該爲這段代碼添加更多的檢查,但它應該讓你瞭解如何克服上述兩個問題。
應該注意的是,這有點違背了Laravel中路由和URI的「正確方式」,所以除非你真的需要這個功能,否則你應該重新考慮你將這些URI形成爲Laravel框架的設置方式更多。
ID = 1&頁= 2&選擇= 1是經典,傳遞參數給服務器的老辦法; id/1/page/2/opt/1是新的框架方式。 –
這種技術的名字是安德魯?謝謝 – clarenswd