Codeigniter模型在助手上显示未定义的属性错误

时间:2014-02-17 14:13:15

标签: php codeigniter model helper

这是帮手文件misc_helper.php中的辅助函数,

function    echoEditorsPickItems($projects = array('02134444', '0314020000')) {
    if (!is_null($projects)) {
        $CI = &get_instance();

        $CI->load->database();
        $CI->load->model('Project');

        $projects = $CI->Project->getAllProjects(); // this is the 28th line
                                                    // getAllProjects() returns
                                                    // an arrays of item

        for ($i=0; $i<EDITORS_PICK_ITEM_LIMIT; $i++) {
           // $CI->Project->getItem('0214010001');

            $out = '';
            $out .= '<li>';
            $out .= '<span>';
            $out .= '<a href="'. base_url() . 'portfolio/detail/' . $projects[$i]['pId'] .'" class="post-img">';
            $out .= '<img src="'. base_url() . 'assets/img/blog/' . $projects[$i]['brandImageUrl'] . '" alt="' . $projects[$i]['title'] . '">';
            $out .= '<span class="overlay"></span>';
            $out .= '</a>';
            $out .= '</span>';
            $out .= '<p class="wrap">';
            $out .= '<a href="'. base_url() . 'portfolio/detail/' . $projects[$i]['pId'] .'" class="rp_title">' . $projects[$i]['title'] . '</a>';
            $out .= '<small class="rp_date">' . $CI->Project->title . '</small>';
            $out .= '</p>';
            $out .= '</li>';

            echo $out;
        }

    }
}

当我调用它时,我收到以下错误,

Severity: Notice
Message:  Undefined property: Project::$Project
Filename: helpers/misc_helper.php
Line Number: 28

编辑:这是我的模特,

class   Project extends CI_Controller {
    private $tableName = DB_TABLE_NAME_PROJECT;

    public  $title;
    public  $description;
    public  $client;
    public  $skills;
    public  $preparedBy;
    public  $catagory;
    public  $date;
    public  $url;
    public  $images;
    public  $templateType;

    function __construct() {
        parent::__construct();
        $this->load->database();
    }

    public function getItem($projectId = NULL) {
        if (!is_null($projectId)) {
            $res = $this->db->get_where($this->tableName, array('pId' => $projectId));

            if ($res->num_rows) {
                $this->title = $res->row(1)->title;
                $this->description = $res->row(1)->description;
                $this->client    = $res->row(1)->client;
                $this->preparedBy       = $res->row(1)->preparedBy;
                $this->skills           = explode(TOKEN_DELIMINATOR, $res->row(1)->skills);
                $this->catagory         = $res->row(1)->catagory;
                $this->date             = $res->row(1)->date;
                $this->url              = $res->row(1)->url;
                $this->images           = explode(TOKEN_DELIMINATOR, $res->row(1)->images);
                $this->templateType     = ($res->row(1)->templateType=='1'? 1:0);

                return TRUE;
            }

            return FALSE;
        }
        return FALSE;
    }

    public function getAllProjects() {
        $res = $this->db->get($this->tableName);

        $projects = array();
        for ($i=0; $i<$res->num_rows(); $i++){
            $projects[$i] = array();
            $projects[$i]['title']          = $res->row($i)->title;
            $projects[$i]['catagory']       = explode(TOKEN_DELIMINATOR, $res->row($i)->catagory);
            $projects[$i]['brandImageUrl']  = $res->row($i)->brandImageUrl;
            $projects[$i]['pId']            = $res->row($i)->pId;
        }

        return $projects;
    }
}

2 个答案:

答案 0 :(得分:1)

CI实例应该参考创建。

$CI = &get_instance();

修改

你的模特错了。

class   Project extends CI_Model {  // you should extend model not controller

答案 1 :(得分:1)

你想要实现什么?从它的外观来看,你试图遍历所有项目(或者可能是一定数量的项目)并显示它们?

如果是这种情况,那么首先(如kumar_v所说)你需要通过引用传递get_instance();函数,因为这将允许你使用原始CodeIgniter对象而不是创建它的副本。 http://ellislab.com/codeigniter/user-guide/general/creating_libraries.html

其次,看起来您正在尝试访问每个项目的属性(pId,brandImageUrl,title)。如果是这种情况,则需要将$CI->Project->getAllProjects();分配给变量并循环显示这些结果。 e.g。

function echoEditorsPickItems($projects = array('02134444', '0314020000')) {
        if (!is_null($projects)) {
            $CI =& get_instance();
            $CI->load->model('Project');

            $projects = $CI->Project->getAllProjects();

            foreach ($projects as $project) {
                $out = '';
                $out .= '<li>';
                $out .= '<span>';
                $out .= '<a href="' . base_url() . 'portfolio/detail/' . $project->pId . '" class="post-img">';
                $out .= '<img src="' . base_url() . 'assets/img/blog/' . $project->brandImageUrl . '" alt="' . $project->title . '">';
                $out .= '<span class="overlay"></span>';
                $out .= '</a>';
                $out .= '</span>';
                $out .= '<p class="wrap">';
                $out .= '<a href="' . base_url() . 'portfolio/detail/' . $project->pId . '" class="rp_title">' . $project->title . '</a>';
                $out .= '<small class="rp_date">' . $project->title . '</small>';
                $out .= '</p>';
                $out .= '</li>';
                echo $out;
            }            
        }        
    }

希望有所帮助。