"am-u-lg-6am-u-md-8">@if(Session::has('message'))" />
最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

Laravel大型项目系列教程(二)

来源:动视网 责编:小OO 时间:2025-09-30 22:14:17
文档

Laravel大型项目系列教程(二)

Laravel大型项目系列教程(二)1、前言本节教程将大概实现用户的注册、修改个人信息、管理用户功能。二、Let'sgo1.创建用户注册视图$phpartisangenerate:viewusers.create修改app/views/users/edit.blade.php:@extends('_layouts.default')@section('main')"am-gam-g-fixed">"am-u-lg-6am-u-md-8">@if(Session::has('message'))
推荐度:
导读Laravel大型项目系列教程(二)1、前言本节教程将大概实现用户的注册、修改个人信息、管理用户功能。二、Let'sgo1.创建用户注册视图$phpartisangenerate:viewusers.create修改app/views/users/edit.blade.php:@extends('_layouts.default')@section('main')"am-gam-g-fixed">"am-u-lg-6am-u-md-8">@if(Session::has('message'))
Laravel大型项目系列教程(二)

1、前言

本节教程将大概实现用户的注册、修改个人信息、管理用户功能。

二、Let's go

1.创建用户注册视图

$ php artisan generate:view users.create

修改app/views/users/edit.blade.php:

@extends('_layouts.default')@section('main') "am-g am-g-fixed"> "am-u-lg-6 am-u-md-8">
@if (Session::has('message')) "am-alert am-alert-{{ Session::get('message')['type'] }}" data-am-alert>

{{ Session::get('message')['content'] }}

> @endif      @if ($errors->has()) "am-alert am-alert-danger" data-am-alert>

{{ $errors->first() }}

> @endif      {{ Form::open(array('url' => 'register', 'class' => 'am-form')) }}        {{ Form::label('email', 'E-mail:') }}        {{ Form::email('email', Input::old('email')) }}
{{ Form::label('nickname', 'NickName:') }}        {{ Form::text('nickname', Input::old('nickname')) }}
{{ Form::label('password', 'Password:') }}        {{ Form::password('password') }}
{{ Form::label('password_confirmation', 'ConfirmPassword:') }}        {{ Form::password('password_confirmation') }}
"am-cf"> {{ Form::submit('Register', array('class' => 'am-btn am-btn-primary am-btn-sm am-fl')) }}
{{ Form::close() }}
>

@stop

修改layouts/nav.blade.php中的@else部分:

@else class="am-topbar-right"> class="am-icon-pencil"> Register class="am-topbar-right"> class="am-icon-user"> Login @endif

在routes.php中增加:

Route::get('register', function(){    return View::make('users.create');});

启动开发服务器,浏览器中访问localhost:8000,导航条中多了一个Register按钮:

点击Register按钮,进入用户注册页面:

2.实现用户注册

在routes.php中增加:

Route::post('register', array('before' => 'csrf', function(){    $rules = array(        'email' => 'required|email|unique:users,email',        'nickname' => 'required|min:4|unique:users,nickname',        'password' => 'required|min:6|confirmed',    );    $validator = Validator::make(Input::all(), $rules);    if ($validator->passes()) { $user = User::create(Input::only('email', 'password', 'nickname'));        $user->password = Hash::make(Input::get('password'));        if ($user->save()) { return Redirect::to('login')->with('message', array('type' => 'success', 'content' => 'Register successfully, please login'));        } else {            return Redirect::to('register')->withInput()->with('message', array('type' => 'danger', 'content' => 'Register failed'));        }    } else {        return Redirect::to('register')->withInput()->withErrors($validator);    }}));

上面表单验证规则的unique:users,email能确保users表中的email字段是唯一的,切记users和email之间不能有空格,confirmed确保提交的数据必须有一个名为password_conformation的字段且与password字段的值相等。

例如当输入已存在的email时,会出现错误提示:

之后我们再修改两个地方,把routes.php中post login内的

return Redirect::to('login')->withInput()->with('message', 'E-mail or password error');

修改为:

return Redirect::to('login')->withInput()->with('message', array('type' => 'danger', 'content' => 'E-mail or password error'));

把login.blade.php中的

@if (Session::has('message'))      

{{ Session::get('message') }}

  @endif

修改为:

@if (Session::has('message')) "am-alert am-alert-{{ Session::get('message')['type'] }}" data-am-alert>

{{ Session::get('message')['content'] }}

>

@endif

现在你就可以尝试注册,如果注册成功就会跳转到登录页面,并给出成功的提示:

注册成功之后你可以试试是否能用刚注册的账号成功登录。

3.修改个人信息

用户注册之后我们还应该让他能够修改信息,在_layouts/nav.blade.php中添加修改个人信息的选项:

  •  Information
  • 添加视图users/edit.blade.php

    $ php artisan generate:view users.edit

    修改users/edit.blade.php:

    @extends('_layouts.default')@section('main')
    @if (Session::has('message'))

    {{ Session::get('message')['content'] }}

    @endif @if ($errors->has())

    {{ $errors->first() }}

    @endif {{ Form::model($user, array('url' => 'user/' . $user->id, 'method' => 'PUT', 'class' => 'am-form')) }} {{ Form::label('email', 'E-mail:') }}
    {{ Form::label('nickname', 'NickName:') }}
    {{ Form::label('old_password', 'OldPassword:') }} {{ Form::password('old_password') }}
    {{ Form::label('password', 'NewPassword:') }} {{ Form::password('password') }}
    {{ Form::label('password_confirmation', 'ConfirmPassword:') }} {{ Form::password('password_confirmation') }}
    {{ Form::submit('Modify', array('class' => 'am-btn am-btn-primary am-btn-sm am-fl')) }} {{ Form::close() }}

    @stop

    在routes.php中添加:

    Route::get('user/{id}/edit', array('before' => 'auth', 'as' => 'user.edit', function($id){ if (Auth::user()->is_admin or Auth::id() == $id) { return View::make('users.edit')->with('user', User::find($id)); } else { return Redirect::to('/'); }}));

    上面的as是命名路由,在生成URL时也可以使用别名。例如Redirect::route('user.edit', $id)。

    现在登录后在右上角会发现多了一个Information的选项,点击后会显示用户个人信息的页面:

    你是不是发现了表单中的Form::model($user),它会根据View::make('users.edit')->with('user', User::find($id))传过来的user进行自动填充。

    之后就要实现真正地修改用户信息了,在routes.php中增加:

    Route::put('user/{id}', array('before' => 'auth|csrf', function($id){ if (Auth::user()->is_admin or (Auth::id() == $id)) { $user = User::find($id); $rules = array( 'password' => 'required_with:old_password|min:6|confirmed', 'old_password' => 'min:6', ); if (!(Input::get('nickname') == $user->nickname)) { $rules['nickname'] = 'required|min:4||unique:users,nickname'; } $validator = Validator::make(Input::all(), $rules); if ($validator->passes()) { if (!(Input::get('old_password') == '')) { if (!Hash::check(Input::get('old_password'), $user->password)) { return Redirect::route('user.edit', $id)->with('user', $user)->with('message', array('type' => 'danger', 'content' => 'Old password error')); } else { $user->password = Hash::make(Input::get('password')); } } $user->nickname = Input::get('nickname'); $user->save(); return Redirect::route('user.edit', $id)->with('user', $user)->with('message', array('type' => 'success', 'content' => 'Modify successfully')); } else { return Redirect::route('user.edit', $id)->withInput()->with('user', $user)->withErrors($validator); } } else { return Redirect::to('/'); }}));

    现在尝试修改信息,如果失败,就会出现错误提示就像下面这样:

    如果成功就会像下面这样:

    这样修改个人信息的功能就完成了。

    4.管理用户

    5.

    上面的完成之后,我们就需要管理员能够管理用户,例如可以修改其他用户的昵称、重置它们的密码、锁定用户等。先需要重写下_layouts/nav.blade.php的@if (Auth::check())里的内容:

    @if (Auth::user()->is_admin)

    @endif

    创建用户列表视图:

    $ php artisan generate:view admin.users.list

    修改views/admin/users/list.blade.php:

    @extends('_layouts.default')@section('main')
    @if (Session::has('message'))

    {{ Session::get('message')['content'] }}

    @endif @foreach ($users as $user) @endforeach
    ID E-mail Nickname Management
    {{ $user->id }} {{ $user->email }} {{{ $user->nickname }}} Edit {{ Form::open(array('url' => 'user/' . $user->id . '/reset', 'method' => 'PUT', 'style' => 'display: inline;')) }} {{ Form::close() }} @if ($user->block) {{ Form::open(array('url' => 'user/' . $user->id . '/unblock', 'method' => 'PUT', 'style' => 'display: inline;')) }} {{ Form::close() }} @else {{ Form::open(array('url' => 'user/' . $user->id, 'method' => 'DELETE', 'style' => 'display: inline;')) }} {{ Form::close() }} @endif
    NoYes @stop

    上面的@foreach相当于for循环,可以遍历@users中的内容。

    把views/_layouts/default.blade.php中的

    移到head中。

    为了保证只有管理员才能管理用户,我们在app/filters.php中增加一个过滤器:

    Route::filter('idAdmin', function(){ if (!Auth::user()->is_admin) { return Redirect::to('/'); }});

    在routes.php中增加:

    Route::group(array('prefix' => 'admin', 'before' => 'auth|isAdmin'), function(){ Route::get('users', function() { return View::make('admin.users.list')->with('users', User::all())->with('page', 'users'); });});Route::model('user', 'User');Route::group(array('before' => 'auth|csrf|isAdmin'), function(){ Route::put('user/{user}/reset', function(User $user) { $user->password = Hash::make('123456'); $user->save(); return Redirect::to('admin/users')->with('message', array('type' => 'success', 'content' => 'Reset password successfully')); }); Route::delete('user/{user}', function(User $user) { $user->block = 1; $user->save(); return Redirect::to('admin/users')->with('message', array('type' => 'success', 'content' => 'Lock user successfully')); }); Route::put('user/{user}/unblock', function(User $user) { $user->block = 0; $user->save(); return Redirect::to('admin/users')->with('message', array('type' => 'success', 'content' => 'Unlock user successfully')); });});

    上面使用了路由组Route::group、路由前缀prefix和路由与模型绑定Route::model,过滤器是可以有多个的用|分隔。

    现在用管理员账号登录后会发现导航条多了一个Users链接,点击Users超链接会出现下图这样:

    上面的用户数据需要自己添加,当点击Block的是否会出现确认的提示框:

    点击Yes操作成功后会像下面这样:

    5.小结

    这节完成了用户管理模块,但是还有很多不完善的地方,你可以在用户列表页面添加按昵称或Email查找用户、只显示锁定的用户等功能,还有你是不是发现了在routes.php中代码显得很零乱,那是因为我们还没有使用MVC模式中的C,在下节教程中就将讲解Laravel中的控制器。

    本文详细出处:http://www.shiyanlou.com/courses/123

    文档

    Laravel大型项目系列教程(二)

    Laravel大型项目系列教程(二)1、前言本节教程将大概实现用户的注册、修改个人信息、管理用户功能。二、Let'sgo1.创建用户注册视图$phpartisangenerate:viewusers.create修改app/views/users/edit.blade.php:@extends('_layouts.default')@section('main')"am-gam-g-fixed">"am-u-lg-6am-u-md-8">@if(Session::has('message'))
    推荐度:
    • 热门焦点

    最新推荐

    猜你喜欢

    热门推荐

    专题
    Top