【问题标题】:Codeigniter model shows Undefined property error on helperCodeigniter 模型在帮助程序上显示未定义的属性错误
【发布时间】:2014-03-16 21:09:20
【问题描述】:

这是我在辅助文件 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;
    }
}

【问题讨论】:

    标签: php codeigniter model helper


    【解决方案1】:

    CI 实例应参考创建。

    $CI = &get_instance();
    

    编辑:

    你的模型出错了。

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

    【讨论】:

    • 第 28 行实际上是什么?
    • 感谢您的帮助 :)
    【解决方案2】:

    你想达到什么目的?从外观上看,您是在尝试遍历所有项目(或者可能是某些项目)并显示它们?

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

    其次,您似乎正在尝试访问每个项目的属性(pId、brandImageUrl、标题)。如果是这种情况,您需要将$CI-&gt;Project-&gt;getAllProjects(); 分配给一个变量并遍历这些结果。例如

    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;
                }            
            }        
        }
    

    希望对您有所帮助。

    【讨论】:

    • 尝试添加 get_instance() 但没有成功!我发现 $CI 无法访问模型。
    • 你通过引用了吗? &get_instance(); (我在原来的答案中错过了)
    • 是的,我做到了。 (虽然在几次尝试失败后没有写在我原来的帖子上)
    • 用更新的代码编辑了我的帖子。希望对你有帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多