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

12
demandé sur Tarik Mokafih 2014-04-08 20:58:14

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.

16
répondu Frederick Li 2015-04-21 03:41:52

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']]);
11
répondu Jarek Tkaczyk 2014-04-08 17:16:47

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');.

3
répondu Kryten 2014-04-08 17:08:18

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:

2
répondu Alex 2017-07-29 22:04:51

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).

1
répondu Qwiso 2014-11-13 14:28:18

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.

0
répondu Fraz Ahmed 2015-04-19 09:53:25

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

0
répondu Devil Inside 2016-05-16 08:25:12