为什么错误消息不会出现在Laravel视图中?

时间:2016-05-05 16:52:33

标签: laravel laravel-5 laravel-5.2 blade

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

我创建了一个名为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' => ['web']的middlware更改为:

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

并且我的所有错误都显示得很完美。

您找到了有关此问题的根本原因吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

仅供快速参考:

答案 1 :(得分:0)

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

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

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

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

问候。