簡體   English   中英

在Laravel 4中將2個參數從路由傳遞到控制器

[英]pass 2 parameters from route to controller in Laravel 4

路線

Route::get('/site/{site_name_en}/{id}', array(
    'as' => 'profile-site',
    'uses' => 'ProfileController@site'
));

控制者

class ProfileController extends BaseController{

    public function site($id, $site_name_en){
        $site = Site::where('id', '=', $id)
            ->where('site_name_en', '=', $site_name_en);

        if($site->count()){
            $site = $site->first();
            return View::make('profile.site')
                ->with('site', $site);
        }
        return App::abort(404);
    }
}

我要實現的目標是:當我訪問以下URL www.domain.com/site/abc/123456 ,它將基於參數顯示正確的頁面。 where子句正確嗎? (因為我無法檢索該值)

你的路線

Route::get('/site/{site_name_en}/{id}',

說第一個參數是站點名稱,第二個參數是ID,但是您的控制器函數交換了參數。 您應該稱呼它為:

public function site($site_name_en, $id){
   // rest of code
}

參數將按照路由定義的順序自動傳遞,而變量名(IIRC)無法識別這些參數。

至於功能的其余部分,我無法真正判斷您是否做對了,但我可以建議:

$site = Site::where('id', '=', $id)
            ->where('site_name_en', '=', $site_name_en)
            ->first();
if($site){
   return View::make('profile.site');
}
return App::abort(404);

或者,您可以使用firstOrFail() ,如果未找到可以用App::error()捕獲的記錄,則拋出ModelNotFoundException App::error()例如,實現概述)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM