【问题标题】:Laravel reset value in input after validation fail?验证失败后,Laravel 在输入中重置值?
【发布时间】:2015-12-23 19:57:08
【问题描述】:

我现在很困惑,我正在从 Laracast 学习 Laravel,根据讲师的说法,验证失败后,表单不会重置用户输入的值。但是在测试验证时,当我提交表单时会重置所有内容。

另一个问题是 未定义变量 $errors 当我尝试访问它时。

我的控制器

<?php

namespace App\Http\Controllers;


use App\Articles;
use App\Http\Requests\CreateArticle;
use Carbon\Carbon;
use App\Http\Requests;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class ArticlesController extends Controller
{



    public function create()
    {
        return view('articles.create');
    }


    public function store(Request $request)
    {
        $this->validate($request, [
            'title' => 'required',
            'body'  => 'required'
        ]);
        Articles::create($request->all());
        return redirect('articles');
    }

}

我的观点

@extends('app')

@section('content')
    <h1>Create a new Articles</h1>

    <hr/>

    {!! Form::open(['url' => 'articles']) !!}

    <div class="form-group">
        {!! Form::label('title', 'Title: ') !!}
        {!! Form::text('title', null, ['class' => 'form-control']) !!}
    </div>


    <div class="form-group">
        {!! Form::label('body', 'Body') !!}
        {!! Form::textarea('body', null, ['class' => 'form-control']) !!}
    </div>


    <div class="form-group">
        {!! Form::label('published_at', 'Published On:') !!}
        {!! Form::input('text', 'published_at', date('Y-m-d'), ['class' => 'form-control']) !!}
    </div>


    <div class="form-group">
        {!! Form::submit('submit', ['class' => 'btn btn-primary']) !!}
    </div>


    @if(isset($errors))
    {{var_dump($errors)}}
    @endif
    {!! Form::close() !!}

@stop

他用v5.0,我用v5.2

【问题讨论】:

  • 你能告诉我们你的验证功能吗?

标签: php laravel laravel-5 laravel-5.2


【解决方案1】:

最适合你的方式

<div class="form-group">
        <label for="title">Title</label>
        <input type="text" name="upload_title" class="form-control" value="{{ (old('title')) ?  old('title') : $data->title}}">
</div>

【讨论】:

    【解决方案2】:

    从您的控制器返回以下内容...

    return redirect('articles')->withInput();
    

    看看是否有帮助。如果您愿意,可以排除某些字段。

    return redirect('articles')->withInput($request->only('email'))
    

    【讨论】:

    • 添加-&gt;withInput()方法后不起作用
    • 工作正常,如果任何验证错误,字段不会重置。检查 Laravel 5.5
    【解决方案3】:

    如果你没有使用

    <div class="form-group">
    {!! Form::label('title', 'Title: ') !!}
    {!! Form::text('title', old('title'), ['class' => 'form-control']) !!}
    </div>
    

    但有简单的输入字段,如

    <input id="Email" name="Email" type="email" class="uit-input" placeholder="your email address" value={{old('Email')}}>
    

    用旧数据“预填充”该值。

    【讨论】:

      【解决方案4】:

      这里有几个问题。

      第一个,验证失败后没有保存输入。我相信这是因为您将 null 传递到构建输入的函数中,而您应该传递您希望它默认为的值。试试下面...

      <div class="form-group">
          {!! Form::label('title', 'Title: ') !!}
          {!! Form::text('title', old('title'), ['class' => 'form-control']) !!}
      </div>
      

      这应该用之前输入的旧数据填充输入元素。只需对其余的表单输入执行相同的过程即可。

      $errors 值未设置的第二个问题实际上是由于 Laravel 5.2 的更改。很多人都遇到过同样的问题,所以我只想向您推荐以前的答案:Laravel 5.2 $errors not appearing in Blade

      【讨论】:

      • 我用5.0再测试一次,我又看了一遍视频,他没有填函数old('title'),只是null。感谢您的回答
      • 在这种情况下,他可能使用Form::model(),我相信它实际上会填充这些值。
      • 问题可能是由新的 LaravelCollective Html 替换为 Illuminate Html 引起的
      猜你喜欢
      • 2014-11-25
      • 2014-03-09
      • 2011-10-04
      • 2019-03-13
      • 2021-11-30
      • 1970-01-01
      • 2021-07-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多