У меня есть форма, которую я пытаюсь сделать повторно заполнить через документацию 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)
}
}
(Страница, отображающая возвращенные ошибки над формой)
<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>
У вас есть проверка формы в неправильной области, которая должна быть на контроллере, а не в модели. как объяснено здесь codeigniter.com/user_guide/libraries/…
@Мистер. ЭД Спасибо за ваш ответ / помощь. В других полных стеках я научился проводить валидацию в моделях ... по крайней мере, так я обычно поступаю в стеках JS / Python и т.д. контроллер, но я также видел примеры в CI, где это делается в Model. Я считаю, что должно быть возможно достичь того, что я хочу проверить в Модели. Я даже попытался перенести свою логику в контроллер (и создать единое правило для проверки, а не использовать массивы правил). По-прежнему не повезло. Я, наверное, упускаю что-то базовое ... хм
@Мистер. ЭД Я добавил form_helper в автозагрузку по отзывам pradeep, так что, похоже, теперь у меня есть доступ к функции set_value() в моем представлении, но, к сожалению, данные не заполняются. Если я установлю второй параметр как значение по умолчанию, он будет заполнен, но сами данные поля - нет. Это происходит даже тогда, когда я переместил проверку на сам контроллер, и даже когда я попытался написать одно правило, а не использовать массивы правил. Кажется, он настроен правильно, мне что-то не хватает ... Еще раз спасибо за ваше время и помощь






Надеюсь, что это поможет вам :
добавьте 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') в качестве второго параметра, и значение по умолчанию действительно отображается, поэтому функция работает. Я не уверен, почему мои данные не заполняются повторно: выполняются функции правил, я могу получать свои ошибки проверки и т. д. Я даже пробовал создавать отдельные правила и вводить логику в контроллер.
Мне придется немного отступить и подумать больше ... Я имею в виду, что появляться нужно настроить правильно ... как уже отмечалось, я даже попытался создать отдельное правило (вместо того, чтобы использовать form-validation.php), но все еще не работает .. .хммм ... Я уверен, что упускаю из виду кое-что базовое ... если ничего не помогает, я думаю, я мог бы перенести данные формы в сеанс для быстрого и грязного решения, но хотел воспользоваться инструментами CI. Большое спасибо за ваше время, это очень много значит!
Обновление: после более подробного изучения form_helper я теперь понимаю, как правильно использовать set_value (). К сожалению, я лишь наполовину принял form_helper и с тех пор научился :) Спасибо!
для валидации используйте модель, а для продуктов используйте контроллер.