【问题标题】:Why error messages doesn't Appear in Laravel views?为什么错误消息不会出现在 Laravel 视图中?
【发布时间】:2016-08-31 13:32:04
【问题描述】:

我想在存储角色时使用自定义请求将自定义验证消息传递到我的视图。

我创建了一个名为StoreRoleRequest的新请求

<?php

namespace App\Http\Requests;

use App\Http\Requests\Request;
use Illuminate\Contracts\Validation\Validator;

class StoreRoleRequest extends Request
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        return [
            'name'   => 'required'
        ];
    }

    protected function formatErrors(Validator $validator)
    {
        return $validator->errors()->all();
    }

    public function messages()
    {
        return [
            'name.required' => 'the name of the Role is mandatory',
        ];
    }
}

然后将这个自定义请求传递给我在RoleController 中的存储函数,如下所示:

public function store(StoreRoleRequest $request)
{
    Role::create($request->all());
    return redirect(route('role.index'));
}

我有一个视图显示创建角色表单,其中验证似乎正常工作但没有显示错误,即使我将它们调用到这样的视图中:

{!! Former::open()->action(route('role.store')) !!}
@if (count($errors->all()))
    <div class="alert alert-danger">
        @foreach ($errors->all() as $error)
            <li>{{ $error }}</li>
        @endforeach
    </div>
@endif
{!! Former::text('name')->label('Groupe name')   !!}
{!! Former::text('display_name')->label('Displayed name')   !!}
{!! Former::text('description')->label('Description')   !!}

{!! Former::actions( Button::primary('Save')->submit(),
                    Button::warning('Clear')->reset()  ,
                    Button::danger('Close')->asLinkTo('#')->withAttributes(['data-dismiss' => 'modal'])
 )!!}
{!! Former::close() !!}

有谁知道为什么错误没有出现在视图中?我是否在自定义请求中循环某些内容?

编辑

注意:即使在登录和注册表单中也不会再出现错误。

在这种情况下,我已将指向 web ['middleware' =&gt; ['web'] 的中间件更改为:

Route::group(['middleware' => []], function () 
{
    // other routes
    Route::resource('role', 'RoleController');
});

我的所有错误都完美显示。

你找到这个问题的根本原因了吗?

【问题讨论】:

  • 可能有很多原因。看看stackoverflow.com/questions/34454081/… - 它可能会有所帮助
  • 首先转储:{{ dd($error) }}。我认为这是内部收藏,这就是为什么它根本没有显示任何内容。
  • @MarcinNabiałek:中间件已正确插入,与您提交的答案完全相同。
  • @FilipKoblański:出现错误时不会进入控制器内部的方法,之前会被阻塞。
  • @MarcinNabiałek:你能评论我的编辑会话吗? :)

标签: laravel laravel-5 laravel-5.2 blade


【解决方案1】:

尝试通过这种方式询问是否存在错误:

@if($errors->any())
    // Your code
    @foreach($errors->all() as $error)
        <li>{{ $error }}</li>
    @endforeach
    // More code
@endif

同时从请求中删除 formatErrors 函数...你不需要它...

函数messages()负责返回您的自定义消息...

问候。

【讨论】:

  • 不起作用,似乎问题不在于显示错误,但我认为与会话有关!
  • 这是您唯一遇到错误消息问题的视图吗?
  • 我刚刚开始进行服务器端验证,这是第一个。
  • 尝试将 store 函数的标题从 public function store(StoreRoleRequest $request) 更改为 public function store(Request $request),然后在函数中添加 dd($request-&gt;all())(在 return 语句之前),看看你的控制器收到了什么...
  • 我曾经使用 Request 并在提交表单后从视图中接收所有输入()但问题是关于验证它是否正常工作但只是显示错误的问题!
【解决方案2】:

在您的问题更新之后,您似乎拥有了更新版本的 Laravel 应用程序(不要将它与 Laravel 框架混淆)。 要验证这一点,请打开文件 app/Providers/RouteServiceProvider.php 并验证方法 map 方法的内容是什么。如果它启动mapWebRoutes,则意味着您拥有5.2.27+ 应用程序,它会自动应用web 组中间件。

如果自动应用web 中间件,您不应在您的routes.php 文件中应用web 中间件,因为它会导致意外行为。

因此,如果您在 RouteServiceProvider 类中定义了 mapWebRoutes,您应该从您的 routes.php 中删除 web 中间件,或者您可以修改您的 RouteServiceProvider 类以不自动应用 web 组中间件。选择哪种解决方案取决于您。

仅供参考:

【讨论】:

    猜你喜欢
    • 2017-07-17
    • 2016-09-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-01
    • 2019-08-08
    • 2013-12-02
    • 2021-11-13
    相关资源
    最近更新 更多