为什么 CodeIgniter 中的 set_rules() 方法会出错?

Why does set_rules() method in CodeIgniter give error?

所以,我是 CodeIgniter 的新手,我决定按照构建 CMS 的教程进行操作。我在我的代码中写了完全相同的东西,但是当我点击 Submit 按钮时,它给了我这个错误(我的 CodeIgniter 版本是 3.1.6):

A PHP Error was encountered
Severity: Notice

Message: Undefined property: Product::$input

Filename: libraries/Form_validation.php

Line Number: 171

Backtrace:

File: /opt/lampp/htdocs/codeigniter_cms/panel/application/controllers/Product.php
Line: 40
Function: set_rules

File: /opt/lampp/htdocs/codeigniter_cms/panel/index.php
Line: 315
Function: require_once


An uncaught Exception was encountered
Type: Error

Message: Call to a member function method() on null

Filename: /opt/lampp/htdocs/codeigniter_cms/panel/system/libraries/Form_validation.php

Line Number: 171

Backtrace:

File: /opt/lampp/htdocs/codeigniter_cms/panel/application/controllers/Product.php
Line: 40
Function: set_rules

File: /opt/lampp/htdocs/codeigniter_cms/panel/index.php
Line: 315
Function: require_once

这是我的产品控制器代码:

<?php

class Product extends CI_Controller {

public $viewFolder = "";

public function __construct()
{
    parent::__construct();
    $this->viewFolder = "product_v";
    $this->load->model("product_model");
}
// index method
// new form method

public function save() {
    $this->load->library("form_validation");

    $this->form_validation->set_rules("title", "Title", "required|trim");
    $this->form_validation->set_message(
        array(
            "required" => "{field} field must be filled."
        )
    );

    $validate = $this->form_validation->run();
    if ($validate) {
        echo "Saved";
    } else {
        echo validation_errors();
    }
}

这是我的 HTML 代码:

<div class="row">
<div class="col-md-12">
    <h4 class="m-b-lg">
        Add New Product
    </h4>
</div><!-- END column -->
<div class="col-md-12">
    <div class="widget">
        <div class="widget-body">
            <form action="<?php echo base_url("product/save"); ?>" method="post">
                <div class="form-group">
                    <label>Title</label>
                    <input name="title" class="form-control" placeholder="Title">
                </div>
                <div class="form-group">
                    <label>Description</label>
                    <textarea name="description" class="m-0" data-plugin="summernote" data-options="{height: 250}"></textarea>
                </div>
                <button type="submit" class="btn btn-primary btn-md btn-outline">Submit</button>
                <a href="<?php echo base_url("product/index"); ?>" class="btn btn-md btn-danger btn-outline">Cancel</a>
            </form>
        </div><!-- .widget-body -->
</div><!-- END column -->

我花了好几个小时试图修复这个错误。任何帮助将不胜感激。

Form_validation 库似乎没有加载到您放置它的位置。我建议您将它放在您的 class 构造中,或者只是将它自动加载到您的 config/autoload.php 文件中。

  • 在你的class构造中
public function __construct()
{
    parent::__construct();
    $this->load->library('form_validation');
    // Add your other models, helpers, etc here
}

  • 在您的 application/config/autoload.php 文件中全局自动加载它
$autoload['libraries'] = array('form_validation');

尝试加载表单助手

$this->load->helper('form');

文档没有说明将表单验证库与表单助手一起使用。但我认为这是必需的。很久以前我遇到了同样的问题。但是我忘记了解决方案。我希望这可以解决您的问题。

所以,我找到了问题。

问题不在 CodeIgniter,而在 LAMPP。所以,我删除了 LAMPP 并进行了全新安装,我的问题就解决了。