Laravel: Route [users.edit] not defined

27,439

There is no users.edit route defined in your routes file. Hence, you are bound to receive that error. There's no users.edit route in your code.

Route::group(['prefix' => 'users', 'before' => 'auth'], function () {
    Route::get('dashboard', function () {
        $layout = View::make('users.dashboard');
        $layout->title = "Dashboard";
        $layout->content = View::make('users.dashboard');       
        return $layout;
    }); 
    Route::get('/all/', [ 'as' => 'users.index', 'uses' => 'UserController@all']);
    Route::get('/create/', [ 'as' => 'users.create', 'uses' => 'UserController@create']);
    Route::get('users/login', [ 'as' => 'users.login', 'uses' => 'UserController@getLogin']);
    Route::post('users/login', [ 'as' => 'users.login', 'uses' => 'UserController@postSignin']);
    Route::get('users/logout', [ 'as' => 'users.logout', 'uses' => 'UserController@getLogout']);
    Route::resource('/','UserController');
});

Add the following route somewhere in your routes file and the error should disappear:

Route::get('/edit/', [ 'as' => 'users.edit', 'uses' => 'UserController@edit']);

Note: You need to replace the controller method name edit to whatever you have defined.


UPDATE 1

That is because, you have 'before' => 'auth' parameter passed in your Route::group() method. Just remove users from edit route and I hope that should do the job for you.

Just A Side note

I presume that you are new in laravel and have less amount of experience with the framework. I would recommend you to go with this only in order to get your hands dirty with the basics. Then once you start gaining the experience and know how things work behind the scenes, you can jump off to the next level.

If I were at your place, I wouldn't have gone with the code that you have provided, instead I would have kept it way too simple for now. My routes.php file would be like this:

/* Routes for users not logged in. */
Route::get('/all', 'UserController@all');
Route::get('/create', 'UserController@create');
Route::get('users/login', 'UserController@getLogin');
Route::post('users/login', 'UserController@postSignin');
Route::get('users/logout', 'UserController@getLogout');

/* Routes for logged in users */
Route::get('/users/dashboard', 'UserSessionsController@dashboard');
Route::get('/users/edit/{id}', 'UserSessionsController@edit');

And then in your view file:

<a href="{{ url('/users/edit', $user->id) }}">EDIT</a>

Then I would have used the middleware only inside the UserSessionsController file like this:

/**
 * Check if the user is authenticated.
 *
 * @return void
 */
public function __construct()
{
    $this->middleware('auth'); // or any other middleware you have.
}

UPDATE 2:

Learn more about the middleware from the following links:

For version: 5

  1. Official Docs
  2. Matt Stauffer On Middleware

For version: 5.1

  1. Official Docs
  2. Youtube Video

For version: 5.2

  1. Official Docs

Hope this helps you out. Happy Coding. Cheers.

Share:
27,439
Niladri Banerjee - Uttarpara
Author by

Niladri Banerjee - Uttarpara

I'm working as a PHP coder with different frameworks like Laravel, CI, CakePHP etc. I have experience in managing PHP and MySQL based projects.

Updated on July 06, 2022

Comments

  • Niladri Banerjee - Uttarpara
    Niladri Banerjee - Uttarpara almost 2 years

    I have created a demo application in Laravel 4, for some learning experience. The routes.php is as follows:

    Route::get('/', function()
    {
        return View::make('hello');
    });
    
    Route::group(['prefix' => 'users', 'before' => 'auth'], function () {
    Route::get('dashboard', function () {
        $layout = View::make('users.dashboard');
        $layout->title = "Dashboard";
        $layout->content = View::make('users.dashboard');       
        return $layout;
    }); 
    Route::get('/all/', [ 'as' => 'users.index', 'uses' => 'UserController@all']);
    Route::get('/create/', [ 'as' => 'users.create', 'uses' => 'UserController@create']);
    Route::get('users/login', [ 'as' => 'users.login', 'uses' => 'UserController@getLogin']);
    Route::post('users/login', [ 'as' => 'users.login', 'uses' => 'UserController@postSignin']);
    Route::get('users/logout', [ 'as' => 'users.logout', 'uses' => 'UserController@getLogout']);
    Route::resource('/','UserController');
    });
    
    Route::controller('users', 'UserController');
    

    Here, I prefixed the "users". However, Trying logging in with/out correct login details, it shows only the login page instead of showing up the error message on the login page or dashboard.

    Any suggestion? FYI,

    The index.blade.php in app\views\users is below:

    @extends('users.user') 
    @section('title', 'User Listing Page')
    @section('description', 'This is the user listing page')
    @section('main')
    
    <h1>All Users</h1>
    
    <p>{{ link_to_route('users.create', 'Add new user') }}</p>
    
    <h1>Login</h1>
    <p>{{ link_to_route('users.login', 'Login') }}</p> 
    
    <table>
    
        <tr>
    
            <td>{{ $users->links() }}</td>
    
        </tr>       
    
    </table>
    
    
    @if ($users->count())
    <table class="table table-striped table-bordered">
        <thead>
            <tr>
        <th>Username</th>
        <th>Email</th>
        <th>Phone</th>
        <th>Name</th>
            </tr>
        </thead>
    
        <tbody>
            @foreach ($users as $user)
                <tr>
          <td>{{ $user->username }}</td>
          <td>{{ $user->email }}</td>
          <td>{{ $user->phone }}</td>
          <td>{{ $user->name }}</td>
          <td>{{ link_to_route('users.edit', 'Edit', array($user->id), array('class' => 'btn btn-info')) }}</td>
          <td>{{ Form::open(array('method' => 'DELETE', 'route' => array('users.destroy', $user->id))) }}
          {{ Form::submit('Delete', array('class' => 'btn btn-danger')) }}
                        {{ Form::close() }}
                    </td>
                </tr>
            @endforeach
    
    
    
        </tbody>
    
    </table>
    
    <table>
    
        <tr>
    
            <td>{{ $users->links() }}</td>
    
        </tr>       
    
    </table>
    
    @else
        There are no users
    @endif
    
    @stop
    

    The script login.blade.php (on the same location as above) as follows:

    @extends('users.user') 
    
    @section('main')
    
    <h1>Login</h1>
    
    {{ Form::open(array('route' => 'users.login')) }}
    
    <ul>
    
    
        <li>
            {{ Form::label('username', 'Username:') }}
            {{ Form::text('username') }}
        </li>
    
        <li>
            {{ Form::label('password', 'Password:') }}
            {{ Form::password('password') }}
        </li>
    
    
        <li>
            {{ Form::submit('Submit', array('class' => 'btn')) }}
        </li>
    </ul>
    {{ Form::close() }}
    
    @if ($errors->any())
    <ul>
        {{ implode('', $errors->all('<li class="error">:message</li>')) }}
    </ul>
    @endif
    
    @stop
    
  • Niladri Banerjee - Uttarpara
    Niladri Banerjee - Uttarpara over 8 years
    It solves the initial issue i.e. Laravel: Route [users.edit] not defined, however, when trying to logging in with correct user/pass, its not redirecting to the dashboard page. Its still showing the login page and seems not redirecting. Do you have any idea? Should I share some coding with you?
  • Saiyan Prince
    Saiyan Prince over 8 years
    Kindly have a look at the UPDATE 1 as I have made the edits.
  • Niladri Banerjee - Uttarpara
    Niladri Banerjee - Uttarpara over 8 years
    I understand your point, however, I'm a bit new to "middleware". Can you provide me some examples / reference links about middleware?
  • Niladri Banerjee - Uttarpara
    Niladri Banerjee - Uttarpara over 8 years
    Ah! Thanks for the same. I need to study them before proceed with middleware in my demo laravel 4 application.
  • Saiyan Prince
    Saiyan Prince over 8 years
    Yep.. Go ahead.. All Too Best.. ;) :)