当前位置 知且行 php laravel表单构建 下一篇:

laravel表单构建

以构建用户注册表单resources/views/users/create.blade.php为例:

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

    {{ csrf_field() }}

    @include('shared._errors')

    <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>

csrf验证

表单中添加{{ csrf_field() }}函数生成:

<input type="hidden" name="_token" value="fhcxqT67dNowMoWsAHGGPJOAWJn8x5R5ctSwZrAq">

用于生成token防止 CSRF(跨站请求伪造)的攻击

不加验证的情况下,提交表单会报419错误:

419错误

old全局函数

Laravel 提供了全局辅助函数 old 来帮助我们在 Blade 模板中显示旧输入数据。这样当我们信息填写错误,页面进行重定向访问时,输入框将自动填写上最后一次输入过的数据。

表单规则验证

表单数据提交到app/Http/Controllers/UsersController.phpstore方法

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

规则验证语言包

添加语言包 overtrue/laravel-lang

$ composer require "overtrue/laravel-lang:~3.0"
  • config/app.phpIlluminate\Translation\TranslationServiceProvider::class, 替换为 Overtrue\LaravelLang\TranslationServiceProvider::class,

  • 修改 config/app.php 语言 'locale' => 'zh-CN',

显示验证结果

Laravel 默认会将所有的验证错误信息进行闪存。当检测到错误存在时,Laravel 会自动将这些错误消息绑定到视图上,因此我们可以在所有的视图上使用 errors 变量来显示错误信息。需要注意的是,在我们对 errors 进行使用时,要先使用 count($errors) 检查其值是否为空。

创建错误信息视图 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
转载必须注明出处:https://www.zhiqiexing.com/96.html

关于我

我希望能成为一个认真、有趣、创造更多价值的人
关注微信
微信扫一扫关注我

微信扫一扫关注我

返回顶部