Laravel:路线[users.edit]未定义

Posted

技术标签:

【中文标题】Laravel:路线[users.edit]未定义【英文标题】:Laravel: Route [users.edit] not defined 【发布时间】:2016-04-02 08:19:09 【问题描述】:

我在 Laravel 4 中创建了一个演示应用程序,以获得一些学习经验。 routes.php 如下:

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

在这里,我为“用户”添加了前缀。但是,尝试使用/不正确的登录详细信息登录时,它只显示登录页面,而不是在登录页面或仪表板上显示错误消息。

有什么建议吗?仅供参考,

app\views\users 中的 index.blade.php 如下:

@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

脚本login.blade.php(与上面相同的位置)如下:

@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

【问题讨论】:

【参考方案1】:

您的routes 文件中没有定义users.edit 路由。因此,您一定会收到该错误。您的代码中没有 users.edit 路由。

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::get('/edit/', [ 'as' => 'users.edit', 'uses' => 'UserController@edit']);

注意:您需要将控制器方法名称edit 替换为您定义的任何名称。


更新 1

那是因为,您在 Route::group() 方法中传递了 'before' =&gt; 'auth' 参数。只需从 edit 路由中删除 users,我希望它应该为您完成这项工作。

只是一个旁注

我认为您是 laravel 的新手,并且对该框架的经验较少。我建议你这样做只是为了让你的手弄脏基础知识。然后,一旦您开始获得经验并了解幕后工作原理,您就可以跳到一个新的水平。

如果我在你的位置,我不会使用你提供的代码,而是我会保持它过于简单现在。我的routes.php 文件是这样的:

/* 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');

然后在你的视图文件中:

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

那么我将只在UserSessionsController 文件中使用中间件,如下所示:

/**
 * Check if the user is authenticated.
 *
 * @return void
 */
public function __construct()

    $this->middleware('auth'); // or any other middleware you have.


更新 2:

通过以下链接了解有关中间件的更多信息:

对于版本:5

    Official Docs Matt Stauffer On Middleware

对于版本:5.1

    Official Docs Youtube Video

对于版本:5.2

    Official Docs

希望这对您有所帮助。快乐编码。干杯。

【讨论】:

它解决了最初的问题,即 Laravel: Route [users.edit] 未定义,但是,当尝试使用正确的用户/密码登录时,它不会重定向到仪表板页面。它仍然显示登录页面,似乎没有重定向。你有什么主意吗?我应该和你分享一些代码吗? 请在我进行编辑时查看 UPDATE 1 我理解你的意思,但是,我对“中间件”有点陌生。你能给我一些关于中间件的例子/参考链接吗? 啊!谢谢你。在我的演示 laravel 4 应用程序中继续使用中间件之前,我需要研究它们。 是的.. 继续.. 最好的.. ;) :)【参考方案2】:

在 Laravel 8 中有点不同

Route::get('/users/edit',[UserController::class, 'edit']);

【讨论】:

以上是关于Laravel:路线[users.edit]未定义的主要内容,如果未能解决你的问题,请参考以下文章

图片未显示在网页上(Laravel)

Laravel中缺少路由所需的参数[重复]

Laravel 6路线未定义

Laravel 5.1 路线未定义

未定义路由 [threads.storev]。 Laravel 8 如何制作这条路线?

Laravel Route [admin.delete-post] 未定义 - 我定义了这条路线