Laravel проверка не удалась, но $ errors всегда пусто - PullRequest
0 голосов
/ 02 августа 2020

Я переношу cms с 5.7 на последнюю, и я не работал с laravel в течение 3 лет.

У меня ошибка: в двух словах: у меня есть форма, у меня есть контроллер с сохранить действие, правила проверки и сообщения и проверка. Теперь валидатор, похоже, работает (не работает) и перенаправляет меня на предыдущий. rout, НО переменная $ errors всегда пустая, и старые значения формы не сохраняются.

Публикация действительной формы работает нормально.

Я вставляю релевантный материал ниже:

ROUTS

 Route::group(['middleware' => ['adm', 'sentinelauth', 'web' ]], function () {



        Route::group(['prefix' => 'roles'], function () {
            Route::get('/', 'BE\RolesController@getIndex' )               ->name('adm_roles_index');
            Route::get('/add', 'BE\RolesController@addAction' )           ->name('adm_roles_add');
            Route::get('/{role}', 'BE\RolesController@editAction')        ->name('adm_roles_edit');
            Route::post('/save', 'BE\RolesController@submitAction')       ->name('adm_roles_save');
        });

/// some more routs ehere
}

Контроллер (соответствующий материал)

 public function addAction(Request $request)
    {
        return $this -> addPageAction($request);
    }

    public function editAction(Role $role, Request $request)
    {
        return $this -> addPageAction($request, $role);
    }

    private function addPageAction(Request $request, $role = null)
    {

        $mode            = 'edit';
        $_userRoles = array();
        $activationStatus = false;
        $roles = false;

        if (!$role)
        {
            $mode = 'add';
        }
        else
        {
            if ($role->id == 1) { // editing the supervisor is not allowed, redirect to list page
                return redirect( route('adm_roles_index') );
            }
        }

        return view('BE.roles.edit') -> with([
            'action'          => $mode,
            'data'       => $role,
        ]);
    }

    public function submitAction(Request $request)
    {
        $messages = [
            'name.required' => 'The name is required.',
            'name.unique' => 'The name is already in use.',
            'slug.required' => 'The slug is required.',
            'slug.unique' => 'The slug is already in use.',
        ];

        $validatorRules = array(
            'name' => 'required|unique:roles',
            'slug' => 'required|unique:roles',
        );

        if ( !empty($request->id) ) {
            $role = Sentinel::findRoleById($request->id);

            if ($role) {
                $validatorRules['name'] = 'required|unique:roles,name,' . $role->id;
                $validatorRules['slug'] = 'required|unique:roles,slug,' . $role->id;
            }

        }

        $this -> validate($request, $validatorRules, $messages);

       /// some more stuff down here for storing the roles etc. but not so important
}

Blade

    {{ dump($errors) }}

            {!! Form::open(array('url' => route('adm_roles_save'), 'method' => 'post', 'class' => 'form-horizontal', 'id' => 'Form', 'name' => 'Form', )) !!}


          {!! Form::label('name', 'Name', []) !!}
          {!! Form::text('name', old('name', (!empty($data -> name)) ? $data -> name : null ),
                                                    [ 'placeholder' => 'Name',
                                                      'class' => ($errors->has('name') ? 'form-control is-invalid' : 'form-control' )
                                                    ]
                                                ) !!}

{!! Form::close() !!}

На этом лезвии всегда отображается

Illuminate\Support\ViewErrorBag {#776 ▼
  #bags: []
}

1 Ответ

0 голосов
/ 03 августа 2020

Я бы посоветовал проверить результат вашей проверки изнутри вашего контроллера. вы можете использовать Validator::make(), чтобы предотвратить автоматическое c перенаправление, которое ->validate() вызывает при сбое проверки.

$validator = Validator::make($request->all(), $validatorRules);
if ($validator->fails()) dd($validator->errors());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...