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

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

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

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

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

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

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

    //這里如何把$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)去?試過(guò)用中間件想把請(qǐng)求參數(shù)重新修改再給返回去但也沒(méi)搞好。

回答
編輯回答
涼汐

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

2017年8月22日 08:55
編輯回答
刮刮樂(lè)

我想的話我會(huì)在.env中添加一項(xiàng)轉(zhuǎn)換開(kāi)關(guān)
將轉(zhuǎn)換邏輯放入Controller里面abc根據(jù)開(kāi)關(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