Неопределенная переменная при проверке ошибок в CodeIgniter 4

Я хотел бы проверить форму и отобразить все ошибки. Я не могу понять, как Code Igniter 4 позволяет мне проверять наличие переменной $validation для отображения предупреждения.

Когда я отображаю форму с помощью функции create(), я получаю сообщение об ошибке, говорящее мне, что переменная не существует, что нормально.

Моя проблема в следующем, как проверить наличие ошибки в представлении, чтобы отображалось предупреждение или нет?

Мой контроллер

<?php namespace App\Controllers;

use CodeIgniter\Model\Site_model;

class Site extends BaseController
{
        public function __construct()
        {
                helper('html', 'url');
        }
        public function create()
        {
                helper(['form']);
                echo view('createSite');
        }

        public function store()
        {
                helper(['form']);
                $validation =  \Config\Services::validation();
                $validation->setRules([
                                'siteName' => 'required',
                                'password' => 'required',
                                'passwordConfirmation' => 'required|matches[password]'
                        ],
                        [   // Errors
                                'siteName' => [
                                        'required' => 'Merci de fournir un nom de site'
                                ],
                                'password' => [
                                        'required' => 'Merci de fournir un mot de passe'
                                ],
                                'passwordConfirmation' => [
                                        'required' => 'Merci de confirmer le mot de passe',
                                        'matches' => 'Les mots de passe ne correspondent pas.'
                                ]
                        ]
                );
                $validation->withRequest($this->request)
                        ->run();
                if (! $this->validate([]))
                {
                        echo view('createSite', [
                                'validation' => $validation
                        ]);
                }
                else
                {
                        echo view('Success');
                }
        }
}

Моя точка зрения

...
<main role="main" class="container vertical-center">
<div class="col">
<div class="alert alert-danger" role="alert">
<?= $validation->listErrors(); ?>
</div>
<?= form_open('site/store') ?>
          <div class="form-group">
            <label for="siteName" class="text-white">Nom du site</label>
            <input type="text" class="form-control" id="siteName" name="siteName" value="" placeholder="Bordeaux" required>
            <div class="invalid-feedback">
              Merci de renseigner un nom de site.
            </div>
          </div>
          <div class="form-group">
            <label for="password">Mot de passe d'administration</label>
            <input type="password" class="form-control" id="password" name="password" required>
            <div class="invalid-feedback">
              Merci de renseigner un mot de passe.
            </div>
          </div>
          <div class="form-group">
            <label for="passwordConfirmation">Confirmation du mot de passe d'administration</label>
            <input type="password" class="form-control" id="passwordConfirmation" name="passwordConfirmation" required>
            <div class="invalid-feedback">
              Merci de confirmer le mot de passe.
            </div>
          </div>
          <button class="btn btn-block btn-success" type="submit" name="submit-form">Envoyer</button>
</form>
</div>
...

Я использую <?= $validation->listErrors(); ?> для отображения ошибок, но при первом отображении формы, до ее проверки, ошибок нет, поэтому я получаю Неопределенная переменная: проверка


person GotExx    schedule 16.01.2020    source источник
comment
В своем классе проверки определите эту переменную как пустую (массив, строку или что-то еще).   -  person Triby    schedule 16.01.2020


Ответы (2)


Попробуйте этот код:

<?= \Config\Services::validation()->listErrors(); ?>

в просмотре файла

person Wandi Tiger    schedule 22.01.2020

Я решил проблему, проверив, была ли инициализирована переменная $validation. Еще странно, что CI не проверяет, пуст ли массив ошибок перед выводом ошибок (чего в моем случае не существует).

Код в моем представлении:

<?php if(isset($validation)) { ?>
<div class="alert alert-danger" role="alert">
  <?= $validation->listErrors(); ?>
<?php } ?>
person GotExx    schedule 27.01.2020