Как мне использовать функцию CodeIgniter set_value () при использовании form_validation.php?

Проблема:

У меня есть форма, которую я пытаюсь сделать повторно заполнить через документацию CodeIgniter, и я пытаюсь использовать функцию set_value() в моем файле просмотра, но получаю сообщение об ошибке: Message: Call to undefined function set_value().

В другом месте я видел решения StackOverflow для аналогичная проблема при использовании функции set_rules() для определения проверок для каждого поля.

Однако у меня все мои проверки собраны вместе в config/form_validation.php, как свод правил. Поскольку все мои проверки определены в наборе правил, он кажется немного другим, чем при определении поля за полем.

Мой набор правил, контроллер, модель и методы представления приведены ниже.

Есть идеи, почему мое повторное заселение не работает?

Спасибо за любую информацию, которую может предложить любой, я новичок в CodeIgniter и, возможно, неправильно понимаю, как все работает.


Правила валидации через config/form-validation.php:

$config = array(
  'create' => array (
    array(
      'field' => 'name',
      'label' => 'product name',
      'rules' => 'trim|required|min_length[5]',
    ),
    array(
      'field' => 'description',
      'label' => 'product description',
      'rules' => 'trim|required|min_length[5]',
    ),
    array(
      'field' => 'price',
      'label' => 'product price',
      'rules' => 'trim|required|min_length[1]|less_than[100000]|decimal',
    ),
  ),
);

В моем контроллере:

  public function create()
    {
    // XSS FILTER $POST OBJECT
    $new_product = $this->input->post(null, true);

    // SEND TO MODEL
    $this->load->model("Product_model");
    $product = $this->Product_model->add_product($new_product);

    // IF VALIDATIONS RETURN FALSE, STORE ERRORS IN FLASH SESSION
    if ($product[0] === FALSE)
    {
      $this->session->set_flashdata('errors', $product[1]);
      redirect("/products/new");
    }

    // IF VALIDATION PASSES, SEND HOME
    redirect("/");
  }

В моей модели:

 public function add_product($product)
  {

    $this->load->library("form_validation");

    if ($this->form_validation->run("create") === FALSE) 
    {

      // STORE ERRORS & SHIP BACK TO CONTROLLER:
      return array(FALSE, validation_errors());
    } 
    else 
    {
      // Success, Escape strings and insert to DB and return TRUE (or item)
    }
  }

В моей форме View:

(Страница, отображающая возвращенные ошибки над формой)

 <form action = "./create" method = "POST">
  <input type = "text" name = "name" id = "name" value = "<?php echo set_value('name'); ?>">
  <textarea name = "description" id = "description" cols = "30" rows = "10" value = "<?php echo set_value('description'); ?>"></textarea>
  <input type = "number" name = "price" id = "price" value = "<?php echo set_value('price'); ?>">
  <input type = "submit" value = "Create">
</form>

для валидации используйте модель, а для продуктов используйте контроллер.

PHP Geek 12.04.2018 06:39

У вас есть проверка формы в неправильной области, которая должна быть на контроллере, а не в модели. как объяснено здесь codeigniter.com/user_guide/libraries/…

Mr. ED 12.04.2018 06:54

@Мистер. ЭД Спасибо за ваш ответ / помощь. В других полных стеках я научился проводить валидацию в моделях ... по крайней мере, так я обычно поступаю в стеках JS / Python и т.д. контроллер, но я также видел примеры в CI, где это делается в Model. Я считаю, что должно быть возможно достичь того, что я хочу проверить в Модели. Я даже попытался перенести свою логику в контроллер (и создать единое правило для проверки, а не использовать массивы правил). По-прежнему не повезло. Я, наверное, упускаю что-то базовое ... хм

twknab 12.04.2018 20:47

@Мистер. ЭД Я добавил form_helper в автозагрузку по отзывам pradeep, так что, похоже, теперь у меня есть доступ к функции set_value() в моем представлении, но, к сожалению, данные не заполняются. Если я установлю второй параметр как значение по умолчанию, он будет заполнен, но сами данные поля - нет. Это происходит даже тогда, когда я переместил проверку на сам контроллер, и даже когда я попытался написать одно правило, а не использовать массивы правил. Кажется, он настроен правильно, мне что-то не хватает ... Еще раз спасибо за ваше время и помощь

twknab 12.04.2018 20:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
1 010
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Надеюсь, что это поможет вам :

добавьте form_helper в ваш controller или в autoload.php

В контроллере:

     public function __construct()
     {
        parent::__construct();
        $this->load->helper('form');
     }

Или в autoload.php:

    $autoload['helper'] = array('form','url');

Подробнее: https://www.codeigniter.com/userguide3/libraries/form_validation.html#re-populating-the-form

Спасибо за это. Я добавил form_helper в свою автозагрузку, и это устранило сообщение об ошибке (теперь функция set_value() работает без ошибок), но, к сожалению, правильное значение формы не распространяется (просто оказывается пустым). Я попытался установить значение по умолчанию в set_value('foo', 'default') в качестве второго параметра, и значение по умолчанию действительно отображается, поэтому функция работает. Я не уверен, почему мои данные не заполняются повторно: выполняются функции правил, я могу получать свои ошибки проверки и т. д. Я даже пробовал создавать отдельные правила и вводить логику в контроллер.

twknab 12.04.2018 20:42

Мне придется немного отступить и подумать больше ... Я имею в виду, что появляться нужно настроить правильно ... как уже отмечалось, я даже попытался создать отдельное правило (вместо того, чтобы использовать form-validation.php), но все еще не работает .. .хммм ... Я уверен, что упускаю из виду кое-что базовое ... если ничего не помогает, я думаю, я мог бы перенести данные формы в сеанс для быстрого и грязного решения, но хотел воспользоваться инструментами CI. Большое спасибо за ваше время, это очень много значит!

twknab 12.04.2018 20:44

Обновление: после более подробного изучения form_helper я теперь понимаю, как правильно использовать set_value (). К сожалению, я лишь наполовину принял form_helper и с тех пор научился :) Спасибо!

twknab 25.05.2018 13:40

Другие вопросы по теме