【问题标题】:Codeigniter testing - call to a member function on a non objectCodeigniter 测试 - 调用非对象上的成员函数
【发布时间】:2014-05-13 12:19:21
【问题描述】:

我正在尝试使用 simpletest 测试我的 codeigniter 系统,但是我不断收到错误消息。我对 PHP 和 codeigniter 很陌生,所以请放轻松。

   Fatal error: Call to a member function add() on a non-object in C:\xampp\htdocs\di2\application\tests\simple_test.php on line 35 

这是我的测试文件,目前我正在尝试简单地将新用户添加到数据库中。

require_once BASEPATH."core/Model.php";
require_once APPPATH."models/Users_model.php";

class ExampleTest extends UnitTestCase
{

function ExampleTest()
{
    parent::__construct('Example tests');
}

///// All functions starting with "test" will be tested /////

function testSimpleStuff()
{
    $name = 'Andreas';
    $online = TRUE;

    $this->assertEqual($name, 'Andreas');
    $this->assertTrue($online);
}


//There are already 8 members in the table
function testAdd()
{
    $this->model->add("new member");
    $this->assertEqual($this->model->get(9),'new member');
    $this->assertNull($this->model->get(0));
    $this->assertNull($this->model->get(10));
}   

  }

这是我要调用的模型:

class Users_model extends CI_Model 
{

    function __construct() 
    {        
        parent::__construct();
    }

    //Used to retrieve all of the members from the database and list them by their id in descending order
    function get($id = null) 
    {
        $this->db->select('id, first_name, last_name, dob, email_address, phone_number, address_line_1, address_line_2, town, county, postcode, student, volunteer');
        $this->db->from('Users');
        if (!is_null($id)) $this->db->where('id', $id);
        $this->db->order_by('id', 'desc');
        return $this->db->get()->result();
    }

    function add($data) 
    {
        $this->db->insert('Users', $data);
        return $this->db->insert_id();
    }

    function update($data, $id) 
    {
        $this->db->where('id', $id);
        $this->db->update('Users', $data);
        return $this->db->affected_rows();
    }

    function delete($id) 
    {
        $this->db->where('id', $id);
        $this->db->delete('Users');
        return $this->db->affected_rows();
    }

    function filterUsers()
    {
        return $this->db->get('Users')->result();
    }   

}

谁能告诉我为什么我会收到这个错误,以及我该如何解决它。提前干杯。

【问题讨论】:

  • 我不习惯codeigniter,但是你创建了Users_Model类的对象吗?好像$this->model 不是一个对象...

标签: php codeigniter testing simpletest


【解决方案1】:

这不是在 codeigniter 中调用模型的正确方法。

$this->model->add("new member");

应该是-

$this->load->model('Users_model');
$this->Users_model->add('new member');

【讨论】:

  • 型号名称应为小写:$this->load->model('users_model'); $this->users_model->add('new member');
【解决方案2】:

这是因为,在 CodeIgntier 中,您需要明确地包含您的模型(我们也可以在 autoload.php 中这样做)。

在控制器的构造函数中

function ExampleTest()
{
    parent::__construct('Example tests');
    $this->load->model('Users_model');
}

现在,从您的控制器中调用它,例如:

$this->Users_model->add("new member");

【讨论】:

    猜你喜欢
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    • 2013-08-23
    • 2012-01-09
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多