使用`form_validation.php`时如何使用CodeIgniter的`set_value()`函数?

时间:2018-04-12 03:43:23

标签: php codeigniter validation

问题:

我有一个表单我正在尝试re-populate via the CodeIgniter docs,我正在尝试在我的视图文件中使用set_value()函数,但收到错误:Message: Call to undefined function set_value()

当使用set_rules()函数逐个字段地定义验证时,我在其他地方看到StackOverflow解决方案similar problem

但是,我已将config/form_validation.php中的所有验证合并为sets of rules。因为我的所有验证都是在规则集中定义的,所以它似乎与逐字段定义时略有不同。

我的规则集,控制器,模型和视图方法如下。

知道为什么我的重新人口不起作用了吗?

感谢任何人提供的任何见解,我是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>

1 个答案:

答案 0 :(得分:1)

希望这会对您有所帮助:

form_helpercontroller

中添加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