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

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

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

項目之前的路由是這樣寫的

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

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

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

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

控制器里的代碼是

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

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

回答
編輯回答
涼汐

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

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

我想的話我會在.env中添加一項轉(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中添加個城市轉(zhuǎn)換中間件, 將轉(zhuǎn)換后的結(jié)果放入request只是這樣改之后abc方法簽名就不一致了

2018年4月1日 11:04