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

问题描述 投票:0回答:3

我在 Laravel 4 中创建了一个演示应用程序,以获取一些学习经验。 paths.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 iews\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
laravel laravel-4 laravel-5 laravel-routing
3个回答
5
投票

您的

users.edit
文件中没有定义
routes
路线。因此,您一定会收到该错误。您的代码中没有 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

那是因为,您在

'before' => 'auth'
方法中传递了
Route::group()
参数。只需从
users
路线中删除
edit
,我希望这能为您完成这项工作。

只是一个旁注

我认为您是 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

  1. 官方文档
  2. Matt Stauffer 谈中间件

适用版本:5.1

  1. 官方文档
  2. Youtube 视频
  3. 适用版本:5.2

官方文档

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

在 Laravel 8 中有点不同


0
投票

我遇到的问题是在两个不同的控制器中使用相同的路由 url。即

0
投票

“/about”,效果完美。

© www.soinside.com 2019 - 2024. All rights reserved.