我已经在Laravel 4中创建了一个演示应用程序,以获取一些学习经验。route.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
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
对于版本:5.1
对于版本:5.2
希望这可以帮助你。编码愉快。干杯。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句