在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/PHP/ Laravel5如何在路由中傳參給控制器?不適用URL傳參方法

Laravel5如何在路由中傳參給控制器?不適用URL傳參方法

需求是以二級域名且城市首拼音代替掉城市全拼音
即 www.test.com/shenzhen/xx >> sz.test.com/xx

項(xiàng)目之前的路由是這樣寫的

//如 $cityFullName = shenzhen
Route::get("{cityFullName}/abc_{where}.htm", 'Controller@abc');

這需求是臨時(shí)改動(dòng),以后還原的。我以group來處理,想著那之前的路由只要復(fù)制一份再小改就可以了

Route::group(['domain' => '{citySortName}.test.com'], function () {
    $cityName = ['sz'=>'shenzhen', 'gz'=>'guangzhou']; //城市名轉(zhuǎn)換 可寫死

    //這里如何把$cityName[$citySortName]給傳到function的第一個(gè)參數(shù)同時(shí)不影響where的傳遞?
    Route::get('abc_{where}.htm', 'Controller@abc');
}

控制器里的代碼是

public function abc(Request $request, $cityFullName, $where='100000'){
    // function
}

直接這樣的話$cityFullName是能接收到首拼音的,如果在控制器里把接收到的首拼音再轉(zhuǎn)回全拼音也可以,但是量挺大的,而且以后還原也是累,所以能不能直接在路由里先轉(zhuǎn)換好并傳進(jìn)去?試過用中間件想把請求參數(shù)重新修改再給返回去但也沒搞好。

回答
編輯回答
涼汐

建議在數(shù)據(jù)庫里把城市全名,簡稱都錄好。然后傳參的時(shí)候在controller方法里進(jìn)行轉(zhuǎn)變再跳轉(zhuǎn)新的地址。不然路由頁面看起來太多代碼了。

2017年8月22日 08:55
編輯回答
刮刮樂

我想的話我會(huì)在.env中添加一項(xiàng)轉(zhuǎn)換開關(guān)
將轉(zhuǎn)換邏輯放入Controller里面abc根據(jù)開關(guān)執(zhí)行是否轉(zhuǎn)換

funcntion abc(Request $req, $citySortName, $where = 100000) {
    $cityFullName = env('CITY_TRANSFORM', 'F') == 'T' ? $this-cityTransform($citySortName) : $citySortName;

}

function cityTransform($citySortName) {
    //...
}

新增的group肯定是需要的

應(yīng)該也可以在group中添加個(gè)城市轉(zhuǎn)換中間件, 將轉(zhuǎn)換后的結(jié)果放入request只是這樣改之后abc方法簽名就不一致了

2018年4月1日 11:04