web-dev-qa-db-fra.com

Laravel 5 Function () introuvable

Je monte un site qui a une section protégée où les utilisateurs doivent être connectés pour accéder. Je l'ai fait en Laravel 4 sans trop d'incident. Cependant, pour la vie de moi, je ne peux pas comprendre pourquoi je ne peux pas le faire fonctionner en Laravel 5 (L5).

Dans L5, le middleware a été/a été introduit. Cela change le fichier d'itinéraire en:

Route::get('foo/bar', ['middleware'=>'auth','FooController@index']);
Route::get('foo/bar/{id}', ['middleware'=>'auth','FooController@show']);

L'itinéraire fonctionne correctement tant que le middleware n'est pas inclus.

Lorsque l'itinéraire est accessible avec le middleware, le résultat n'est pas tellement amusant.

Oups, je crois qu'il y a un problème ...

ReflectionException dans Route.php ligne 150:

La fonction () n'existe pas

Toute perspicacité, aide et/ou assistance est très appréciée. J'ai fait le circuit Google et je n'ai rien trouvé de pertinent pour ma situation actuelle. Merci d'avance.

34
joseph

vous avez oublié la touche uses:

Route::get('foo/bar/{id}', ['middleware'=>'auth', 'uses'=>'FooController@show']);
84
manix

Si vous ajoutez quelque chose de plus que votre méthode de contrôleur dans vos routes, vous devez ajouter uses comme clé du tableau pour votre contrôleur, donc par exemple si je n'ai pas de middleware, il suffit d'écrire:

Route::get('foo/bar', 'FooController@index');
Route::get('foo/bar/{id}', 'FooController@show');

Cependant, si vous souhaitez ajouter un middleware, vous devez écrire:

Route::get('foo/bar', ['middleware'=>'auth','uses' => 'FooController@index']);
Route::get('foo/bar/{id}', ['middleware'=>'auth','uses' => 'FooController@show']);
8
Marcin Nabiałek

Si vous n'utilisez pas de contrôleur pour votre vue et que vous souhaitez simplement afficher la vue, vous devez procéder comme suit:

Route::get('foo/bar', ['middleware' => 'auth', function () {
    return View::make('path.to.your.page');
}]);
5
paulalexandru