Laravel——Web开发实战之路(六)
@[Laraval|后端|框架]
前言
接下来,我们就进入对用户的处理的,就是书上的第六章啦,这一章可以说是非常长了,打算写两次hhhh
显示用户信息
Laravel 遵从 RESTful 架构的设计原则,将数据看做一个资源,由 URI 来指定资源。对资源进行的获取、创建、修改和删除操作,分别对应 HTTP 协议提供的 GET、POST、PATCH 和 DELETE 方法。当我们要查看一个 id 为 1 的用户时,需要向 /users/1 地址发送一个 GET 请求,当 Laravel 的路由接收到该请求时,默认会把该请求传给控制器的 show 方法进行处理。
资源路由
Laravel 为提供了 resource 方法来定义用户资源路由。
routes/web.php
Route::resource('users', 'UsersController');
resource 方法将遵从 RESTful 架构为用户资源生成路由。该方法接收两个参数,第一个参数为资源名称,第二个参数为控制器名称
代码等价于
Route::get('/users', 'UsersController@index')->name('users.index');
Route::get('/users/{user}', 'UsersController@show')->name('users.show');
Route::get('/users/create', 'UsersController@create')->name('users.create');
Route::post('/users', 'UsersController@store')->name('users.store');
Route::get('/users/{user}/edit', 'UsersController@edit')->name('users.edit');
Route::patch('/users/{user}', 'UsersController@update')->name('users.update');
Route::delete('/users/{user}', 'UsersController@destroy')->name('users.destroy');
添加展示个人页面的show方法
在app/Http/Controllers/UsersController.php
中定义show方法
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Models\User;
class UsersController extends Controller
{
public function create()
{
return view('users.create');
}
public function show(User $user)
{
return view('users.show', compact('user'));
}
}
将用户对象 $user 通过 compact 方法转化为一个关联数组,并作为第二个参数传递给 view 方法,将数据与视图进行绑定。
Laravel 会自动解析定义在控制器方法(变量名匹配路由片段)中的 Eloquent 模型类型声明。在上面代码中,由于
show()
方法传参时声明了类型 —— Eloquent 模型User
,对应的变量名$user
会匹配路由片段中的{user}
,这样,Laravel 会自动注入与请求 URI 中传入的 ID 对应的用户模型实例
建立用户界面
路径resources/views/users/show.blade.php
@extends('layouts.default') @section('title', $user->name) @section('content') {{ $user->name }} - {{ $user->email }} @stop
这里,在教程中其实还有一个Gravatar的头像是使用,就不赘述啦,添加完以后,大概长这个样子
表单注册
在此之前,需要在清空数据库
方法:进入虚拟机,使用php artisan migrate:refresh
即可
构建注册页面
需要我们在resources/views/users/create.blade.php
中添加表单元素
@extends('layouts.default')
@section('title', '注册')
@section('content')
<div class="col-md-offset-2 col-md-8">
<div class="panel panel-default">
<div class="panel-heading">
<h5>注册</h5>
</div>
<div class="panel-body">
<form method="POST" action="{{ route('users.store') }}">
<div class="form-group">
<label for="name">名称:</label>
<input type="text" name="name" class="form-control" value="{{ old('name') }}">
</div>
<div class="form-group">
<label for="email">邮箱:</label>
<input type="text" name="email" class="form-control" value="{{ old('email') }}">
</div>
<div class="form-group">
<label for="password">密码:</label>
<input type="password" name="password" class="form-control" value="{{ old('password') }}">
</div>
<div class="form-group">
<label for="password_confirmation">确认密码:</label>
<input type="password" name="password_confirmation" class="form-control" value="{{ old('password_confirmation') }}">
</div>
<button type="submit" class="btn btn-primary">注册</button>
</form>
</div>
</div>
</div>
@stop
Laravel 提供了全局辅助函数 old 来帮助我们在 Blade 模板中显示旧输入数据。这样当我们信息填写错误,页面进行重定向访问时,输入框将自动填写上最后一次输入过的数据。
添加基本的样式
/* forms */
input, textarea, select, .uneditable-input {
border: 1px solid #bbb;
margin-bottom: 15px;
}
input {
height: auto !important;
}
.panel {
margin-top: 50px;
}