2014-05-07 5 views
0

Routepasse 2 paramètres de route vers contrôleur dans Laravel 4

Route::get('/site/{site_name_en}/{id}', array(
    'as' => 'profile-site', 
    'uses' => '[email protected]' 
)); 

Contrôleur

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); 
    } 
} 

Ce que je suis en train de réaliser est: que lorsque je visite l'adresse suivante www.domain.com/site/abc/123456 , il montrera la page correcte basée sur les paramètres. La clause where est-elle correcte? (Parce que je ne pouvais pas récupérer la valeur)

Répondre

3

Votre itinéraire

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

dit le 1er paramètre est le nom du site, le second l'identifiant, mais votre fonction de contrôleur a les arguments échangés. Vous devriez l'appeler:

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

paramètres sont automatiquement transmis dans l'ordre dans lequel ils sont définis par la route, et ne sont pas reconnus par le nom de la variable (IIRC).

Comme pour le reste de votre fonction, je ne peux pas vraiment dire si vous faites bien ou non, mais je peux suggérer ceci:

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

Sinon, vous pouvez utiliser firstOrFail(), qui jette un ModelNotFoundException si l'enregistrement n'est pas trouvé que vous pouvez attraper avec App::error() par exemple (une implémentation est décrite dans le manuel)

+0

Je suis sûr que la réponse de Damien Pirsy résoudra le problème, mais je suggère d'ajouter une contrainte de route, c'est seulement pour la sécurité. http://laravel.com/docs/routing#route-parameters –

+0

Merci Damien. – spacemonkey

Questions connexes