CI4 - проверка формы с составными данными из - PullRequest
0 голосов
/ 10 июля 2020

Я использую библиотеку проверки CI4 для проверки моей формы на стороне сервера. Тег формы создается с помощью вспомогательной функции form_open_multipart. Вот пример кода для HTML и контроллера

ProductController. php (Контроллер)

class ProductController extends BaseController
{
 ...

 public function create()
    {
        if (!$this->validateFrom()) {
            echo '<pre>'.print_r($this->validator->getErrors());die();
            $this->session->setFlashdata('validator', $this->validator);
            $this->session->setFlashdata('product_form', $this->request->getPost());
            return redirect('admin.product.new');
        }
        ...
    }
 private function validateFrom()
   {
    return $this->validate([
        'product_name' => [
            'label' => 'Product name',
            'rules' => 'required',
            'errors' => [
                'required' => '{field} is required.'
            ]
        ]
    ]);
  }

 ...

}

ProductForm. php (Просмотр файла)

<?= form_open_multipart(route_to('prodyct.create'), ['id' => 'prodForm', 'class' => 'form-horizontal']); ?>

<div class="form-group row">
    <label for="product_name" class="col-4 col-form-label text-right">Product Name</label>
    <div class="col-8 p-0">
        <input type="text"
               class="form-control <?= $validator->hasError('product_name') ? 'is-invalid' : '' ?>"
               id="product_name"
               name="product_name"
               value="<?= $productForm->product_name ?? null ?>"
               placeholder=""/>
        <?php if ($validator->hasError('product_name')): ?>
            <div class="invalid-feedback">
                <?= $validator->getError('product_name'); ?>
            </div>
        <?php endif; ?>
    </div>
</div>
<div class="form-group row">
    <label for="product_image" class="col-4 col-form-label text-right">Product Image</label>
    <div class="col-8 p-0">
        <input type="text"
               class="form-control <?= $validator->hasError('product_image') ? 'is-invalid' : '' ?>"
               id="product_image"
               name="product_image"
               value="<?= $productForm->product_image ?? null ?>"
               placeholder=""/>
        <?php if ($validator->hasError('product_image')): ?>
            <div class="invalid-feedback">
                <?= $validator->getError('product_image'); ?>
            </div>
        <?php endif; ?>
    </div>
</div>

<?= form_close(); ?>

При отправке формы всегда происходит сбой при проверке, даже если указано значение.

Array
(
    [product_name] => Product Name is required.
)

Когда я проверяю с помощью метода withRequest of CodeIgniter\Validation\Validation Кажется, что когда он пытается получить данные с помощью $this->data = $request->getRawInput();, getRawInput возвращает значение null.

Может ли кто-нибудь помочь мне с этим?

Спасибо!

1 Ответ

0 голосов
/ 19 июля 2020

я думаю, вместо использования route_to('prodyct.create') лучше использовать base_url()

вот так ...

<?= form_open_multipart(base_url('home/create'), ['id' => 'prodForm', 'class' => 'form-horizontal']); ?>

, потому что, когда я пытаюсь var_dump(route_to('some_route'), его возвращаемое значение является логическим route_to(...) boolean false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...