Laravel——Web开发实战之路(七)

21 篇文章 1 订阅
10 篇文章 0 订阅

Laravel——Web开发实战之路(七)

@[Laraval|后端|框架]


前言

之前已经写好的注册页面,添加了控制器,也加了样式,但是还是没法注册,那是因为每加store方法,这次我们来给前面的东西扫扫尾

用户数据验证

我们还需要在用户控制器中添加一个用于处理表单数据提交后的 store 方法,用于处理用户创建的相关逻辑
app/Http/Controllers/UsersController.php

  public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|max:50',
            'email' => 'required|email|unique:users|max:255',
            'password' => 'required|confirmed|min:6'
        ]);
        return;
    }

验证数据:
- name:必需,最长50
- email:必需,符合email格式,唯一,最长255
- password:必需,要验证,最短6

这个时候注册是这样的
这里写图片描述

表单提交异常

也就是说,这个时候,注册页面还是没法正常工作

原因:使用 POST 方法提交表单时,Laravel 为了安全考虑,会让我们提供一个 token(令牌)来防止我们的应用受到 CSRF(跨站请求伪造)的攻击

解决办法:添加csrf_field放法

{{ csrf_field() }}

这时,就可将注册页面改为

@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') }}">
          {{ csrf_field() }}

          <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

遗憾的是,由于缺失必要的错误提示和注册成功提示,依旧没法使用表单

注册失败提示

resources/views/shared/_errors.blade.php加上提交失败提示

@if (count($errors) > 0)
  <div class="alert alert-danger">
      <ul>
          @foreach($errors->all() as $error)
          <li>{{ $error }}</li>
          @endforeach
      </ul>
  </div>
@endif

简单的说,就是当出现error时,把每一个error列举出来

Blade 支持所有的循环语句和条件判断语句,如 @if, @elseif, @else, @for, @foreach, @while 等等,应用在 Blade 中的表达式都需要以 @ 开头。

接下来,就在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">
      @include('shared._errors')

      <form method="POST" action="{{ route('users.store') }}">
          {{ csrf_field() }}

          <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

此时提交结果依旧和之前一样,因为还差一个成功后的重定向(书上说已经可以看到结果,然并卵)

注册成功

用户注册完成后,需要做的事有
- 将用户提交的信息存储到数据库,并重定向到其个人页面;
- 在网页顶部位置显示注册成功的提示信息;

一、保存用户,重定向到个人主页

app/Http/Controllers/UsersController.php
加入

<?php

namespace App\Http\Controllers;
.
.
.
class UsersController extends Controller
{
    .
    .
    .
    public function store(Request $request)
    {
        $this->validate($request, [
            'name' => 'required|max:50',
            'email' => 'required|email|unique:users|max:255',
            'password' => 'required|confirmed|min:6'
        ]);

        $user = User::create([
            'name' => $request->name,
            'email' => $request->email,
            'password' => bcrypt($request->password),
        ]);

        return redirect()->route('users.show', [$user]);
    }
}

创建一个新用户,并且使用路由定向到它的个人主页

二、消息提示

在return前加上

  session()->flash('success', '欢迎,您将在这里开启一段新的旅程~');

使用 session() 方法来访问会话实例。而当我们想存入一条缓存的数据,让它只在下一次的请求内有效时,则可以使用 flash 方法。flash 方法接收两个参数,第一个为会话的键,第二个为会话的值,我们可以通过下面这行代码的为会话赋值。

然后,像添加错误提示一样加上_messages.blade.php就好

@foreach (['danger', 'warning', 'success', 'info'] as $msg) @if(session()->has($msg)) <div class="flash-message"> <p class="alert alert-{{ $msg }}"> {{ session()->get($msg) }} </p> </div> @endif @endforeach

并且在blade视图内include进去

<!DOCTYPE html>
<html>
  <head>
    <title>@yield('title', 'Sample App') - Laravel 入门教程</title>
    <link rel="stylesheet" href="/css/app.css">
  </head>
  <body>
    @include('layouts._header')

    <div class="container">
      <div class="col-md-offset-1 col-md-10">
        @include('shared._messages')
        @yield('content')
        @include('layouts._footer')
      </div>
    </div>
  </body>
</html>

最后

现在,我们就可以进行注册了

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值