Laravel: la méthode [show] n'existe pas
en essayant d'accéder à cette URL 'users/login' j'ai eu cette erreur, Voici mon code :
Afficher les utilisateurs/login.lame.php:
<head>Sign in : </head>
<body>
{{ HTML::ul($errors->all()) }}
<?php echo Form::open(array('url' => 'users'));
echo '<div class="form-group">';
echo Form::label('username', 'User Name');
echo Form::text('ausername', null, array('class' => 'form-control'));
echo '</div>';
echo '<div class="form-group">';
echo Form::label('Password', 'Password');
echo Form::password('apassword', null, array('class' => 'form-control'));
echo '</div>';
echo Form::submit('Sign in', array('class' => 'btn btn-primary'));
echo Form::close();
?>
</body>
Contrôleur De Usercontroller.php
<?php
class UserController extends BaseController {
public function index()
{
$users = User::all();
return View::make('users.index')
->with('users', $users);
}
public function create()
{
return View::make('users.create');
}
public function store()
{
$rules = array(
'username' => 'required|alpha_dash',
'password' => 'required|confirmed',
'name' => 'required|regex:/^[a-zA-Z][a-zA-Z ]*$/',
'email' => 'required|email|unique:users',
'country' => 'required'
);
$validator = Validator::make(Input::all(), $rules);
if ($validator->fails()) {
return Redirect::to('users/create')
->withErrors($validator)
->withInput(Input::except('password'));
} else {
$user = new User;
$user->username = Input::get('username');
$user->password = Hash::make(Input::get('password'));
$user->name = Input::get('name');
$user->email = Input::get('email');
$user->country = Input::get('country');
$user->save();
// redirect
Session::flash('message', 'Successfully created user!');
return Redirect::to('users');
}
}
public function login()
{
$reflector = new ReflectionClass("UserController");
$fn = $reflector->getFileName();
dd($fn);
return View::make('users.login');
}
public function authen()
{
if (Auth::attempt(array('username' => Input::get('ausername'), 'password' => Input::get('apassword'))))
{
return Redirect::intended('users');
}
}
}
et mes itinéraires.php
<?php
Route::resource('users','UserController');
Route::get('users/login', 'UserController@login');
Route::get('/', function()
{
return View::make('hello');
});
est-il un itinéraire problème, je vous remercie pour l'aide
7 réponses
j'ai eu le même problème que vous. Le problème se termine par un réarrangement du code de ressource, i.e.
Route::get('masterprices/data', 'MasterPriceController@data');
Route::get( 'masterprices/upload', 'MasterPriceController@upload');
Route::post('masterprices/upload', 'MasterPriceController@do_upload');
Route::get('masterprices/{masterprices}/multipledelete', 'MasterPriceController@multipledelete');
Route::resource('masterprices', 'MasterPriceController');
il vérifie l'autre handler possible, si aucun Il atteindra la dernière ligne qui est la ressource pour gérer la page d'index.
celui-ci:
Route::resource('users','UserController');
définit les routes suivantes:
| GET|HEAD users | users.index | UsersController@index
| GET|HEAD users/create | users.create | UsersController@create
| POST users | users.store | UsersController@store
| GET|HEAD users/{users} | users.show | UsersController@show
| GET|HEAD users/{users}/edit | users.edit | UsersController@edit
| PUT users/{users} | users.update | UsersController@update
| PATCH users/{users} | | UsersController@update
| DELETE users/{users} | users.destroy | UsersController@destroy
Donc URI users/login appels des utilisateurs.afficher l'itinéraire et c'est ça le problème.
la Solution, c'est comme Kryten dit de supprimer l'itinéraire complètement, mais je suppose que vous souhaitez utiliser certaines de ces routes de la ressource, comme dans votre contrôleur (créer, de stocker, de l'index), afin de mieux utiliser ceci:
Route::resource('users', 'UserController', ['only'=> ['index','create','store']]);
la liste des problèmes avec le Route::resource
appel. En incluant cette instruction, vous dites à Laravel que vous voulez utiliser un controller RESTful pour les chemins qui commencent par users
. Cela signifie que lorsque vous cliquez sur L'URL 'users / login', le contrôleur RESTful interprète cela comme une action "show" pour le user
contrôleur et échoue, car il n'y a pas de show
méthode. Voir http://laravel.com/docs/controllers#resource-controllers pour plus de détails - le tableau sur cette page explique les routes sont configurés automatiquement lorsque vous mettez en œuvre un contrôleur de ressources.
la solution est d'enlever Route::resource('users','UserController');
.
ajouter la route personnalisée avant les routes ressources dans votre fichier routes.
selon la documentation de Laravel:
S'il devient nécessaire d'ajouter des routes supplémentaires à un contrôleur de ressources au-delà des routes de ressources par défaut, vous devez définir ces routes avant votre appel à Route::resource; sinon, les routes définies par la méthode resource peuvent involontairement avoir priorité sur vos routes supplémentaires:
LA solution simple est celle que je viens de trouver après avoir lu votre question. Définir votre ::resource
routes après::get
ou ::post
itinéraires. Je viens de tester le 4.2 et ça marche (après avoir eu le même problème).
j'avais le même problème mais il était bizarre. Dans mon fichier de routes j'avais:
Route::controller('carts', 'CartsApiController');
Quand je l'ai changé pour:
Route::controller('cart', 'CartsApiController');
Tout allait bien et je n'ai pas eu l'erreur à nouveau. Je ne suis pas sûr mais semble comme un problème de nom.
j'ai également fait face au même problème mais je l'ai trouvé très stupide et erreur stupide une utilisation route comme ceci: -
Route::get('users/login', ['uses'=>'UserController@login', 'as'=> 'userLogin']);
et dans votre point de vue d'un contrôleur ou d'utiliser route('userLogin'); pour la route à cette fonction spécifique dans votre controller