【问题标题】:Code Igniter form_validation load fatal errorCodeigniter form_validation 加载致命错误
【发布时间】:2011-11-14 16:31:26
【问题描述】:

我正在使用代码点火器 2.0.3。

当我尝试在我的控制器 $this->load->library('form_validation') 中加载 form_validation 时,我收到一条错误消息:

致命错误:在第 44 行对 D:\Installation\xampp\htdocs\MyApp\application\controllers\login.php 中的非对象调用成员函数 set_rules()

在 login.php 的第 44 行,这就是我所拥有的:

$this->form_validation->set_rules('name', 'Name', 'trim|required');

当我在 autoload.php 中加载 form_validation 时,没有错误。

为什么会这样?

【问题讨论】:

    标签: codeigniter


    【解决方案1】:

    在 Loader 代码中,CodeIgniter 通过“get_instance”方法获取 Controller 实例以添加加载的对象。

    在您的 Controller 子类中,也尝试运行该方法并查看返回的内容。

    在我的例子中,我发现它是一个自动加载的控制器子类,我什至没有在我的任何代码中使用或扩展它——它只是一个存根类,我必须让我的所有页面控制器都扩展一个基站控制器,它又扩展了 CI_Controller。我强调我没有扩展这个对象,而是在我自己的页面控制器中为 CI_Controller 绕过它。我不知道 CodeIgniter 是如何产生我想将我的实例添加到该对象的想法,但无论如何解决方法是从自动加载库列表中删除该对象。

    很疯狂,但也许它也适合你。

    【讨论】:

      【解决方案2】:

      我可以重现该错误的唯一方法是翻转 libraryvalidation 的位置:

      Causes Error -
      $this->form_validation->set_error_delimiters('name', 'Name', 'trim|required');
      $this->load->library('form_validation');
      
      Works -
      $this->load->library('form_validation');
      $this->form_validation->set_error_delimiters('name', 'Name', 'trim|required');
      

      在加载类之前调用​​类的方法。 这也可以解释为什么自动加载验证不会对您产生错误。

      【讨论】:

      • 是的,这是唯一有意义的事情。也可能是因为他从错误的方法加载库(尽管我对此表示怀疑)。就像他想在控制器类中的多个方法中使用它时,可能是从index() 而不是__construct() 加载它。
      • 也可以。也许这将是 OP 的第一个接受的答案... :-|
      • 我遇到了与 OP 相同的问题,并且我的代码顺序正确,如下所示:$this->load->library('form_validation'); $this->form_validation->set_rules('email', 'Email', 'required'); 导致相同的问题,首先是:A PHP Error was encountered Severity: Notice Message: Undefined property: Homepage::$form_validation Filename: controllers/homepage.php Line Number: 68,然后是 Fatal error: Call to a member function set_rules() on a non-object in /Users/jzuckerman/Sites/ally/application/controllers/homepage.php on line 68
      • 另外我应该补充一点,我有理由相信 CodeIgniter 正确地找到了我的模型,因为如果我更改传递给 load 方法的字符串并输入无效的字符串,我可能会产生大量不同的错误型号名称。
      • @Jon z - 尝试将验证移至控制器的 __construct...public function __construct() { parent::_construct(); $this->load->library('form_validation'); }。那应该可以纠正您的错误。然后打开 CI 用户指南 -> 表单验证类并将您的实现与示例进行比较。您必须有一些不合适的东西才能显示该特定错误。
      猜你喜欢
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 2011-10-06
      • 2016-09-22
      • 2014-02-15
      • 1970-01-01
      • 2017-02-22
      相关资源
      最近更新 更多