【问题标题】:Laravel Default Validaion error message not workLaravel 默认验证错误消息不起作用
【发布时间】:2018-12-02 00:05:39
【问题描述】:

我是 laravel 的新手。我想在表单提交上设置 laravel 验证。我在下面编写了验证验证工作的代码,但在查看时它没有显示任何错误消息

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\User;
use DB;
use Session;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Support\Facades\Hash; 
use App\Http\Requests;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Redirect;
use Illuminate\Support\Facades\Auth;
use Illuminate\Foundation\Auth\RegistersUsers;
use Illuminate\Support\MessageBag;
use Illuminate\Pagination\LengthAwarePaginator;

并在我的注册函数中添加代码

        $input = Input::all();
    $rules = array(
        'first_name' => array('required'),
        'last_name' => 'required');

    $validator = Validator::make($input, $rules);
    if ($validator->fails()) {
        $messages = $validator->messages();
 //            echo '<pre>';
 //            print_r($messages);
//            exit;
//            return redirect('admin/user/add')
//                            ->withErrors($validator)
//                            ->withInput();
        return Redirect::back()->withErrors($messages);
    }

为了显示我在我的视图中使用了以下代码

@if ($errors->any())
@foreach ($errors->all() as $error)
{{ $error }}
@endforeach
@endif

谁能帮我解决这个问题。

【问题讨论】:

  • 哪个 laravel 版本?

标签: php laravel validation


【解决方案1】:

如果存在验证错误,您应该在视图中使用$errors 来获取它们。 $errors 变量是 Illuminate\Support\MessageBag 的一个实例,Laravel always 让你的视图可以使用它。你可以这样使用它:

@if ($errors->any())
    <div class="errors">
        @foreach ($errors->all() as $message)
            <p>{{ $message }}</p>
        @endforeach
    </div>
@endif

这会将您的所有验证消息(如果有)输出到您的视图。如果要检查特定字段是否有错误消息,可以使用has 方法。然后,您可以使用first 消息检索该字段的第一条消息,或使用get 方法检索所有消息。一个使用first的例子:

@if ($errors->has('your_field'))
    <div class="error">{{ $errors->first('your_field') }}</div>
@endif

更多信息请参见here

【讨论】:

  • 以下是我的代码,请检查并查看,让我知道我的代码使用 Illuminate\Http\Request 中的问题在哪里;使用 App\Http\Controllers\Controller;使用应用\用户;使用数据库;使用会话;使用 Illuminate\Foundation\Validation\ValidatesRequests;使用 Illuminate\Support\Facades\Hash;使用 App\Http\Requests;使用 Illuminate\Support\Facades\Validator;使用 Illuminate\Support\Facades\Input;使用 Illuminate\Support\Facades\Redirect;使用 Illuminate\Support\Facades\Auth;使用 Illuminate\Foundation\Auth\RegistersUsers;
  • $validatedData = $this->validate($request,[ 'first_name' => 'required', 'last_name' => 'required', ]);
  • @ if ($errors->any())
      @foreach ($errors->all() as $error)
    • {{ $error }}
    • @endforeach
    @endif
  • 请在您的问题中使用格式发布您的代码。在评论中以纯文本形式阅读非常困难
  • 我已经更新了我的问题,请检查并让我知道我哪里出错了。 @乔纳森
【解决方案2】:

验证消息存储在$errors 中,它被全局传递给所有视图,而不是session()-&gt;get("message"),除非您特别使用它。有了以上内容,您将使用

@if($errors->has("first_name"))
<p class="alert alert-info">{{ $errors->first("first_name") }}</p>
@endif

对所有正在验证的字段执行相同的操作,您应该会开始看到错误消息。

【讨论】:

  • 还是不行。我已使用您的代码显示错误消息但不显示。
【解决方案3】:

您是否覆盖了“showRegistrationForm”函数? 如果是,你应该重写函数“注册”:

public function register(Request $request) {
    $validation = $this->validator($request->all());
    if ($validation->fails())  {
        $errors = $validation->errors();
        return view('auth.register', compact('errors'));
    }
    else {
        $user = $this->create($request->all());
        Auth::login($user); 
        return redirect('/')->with(['message'=>'Account Successfully Created.']);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-19
    • 2020-08-15
    • 1970-01-01
    • 2021-12-30
    • 2021-03-13
    • 1970-01-01
    相关资源
    最近更新 更多