1

Code Igniter フレームワークを使用してアプリケーションを構築しています。このフレームワークでは、必要なコントローラーにロードするさまざまなライブラリを構築しています。

複数のライブラリを「ホーム」コントローラーにロードしようとすると、次のメッセージが表示されます。

A PHP Error was encountered

Severity: Notice

Message: Undefined property: Home::$messaging

Filename: controllers/home.php

Line Number: 73


Fatal error: Call to a member function getMessages() on a non-object in /home/totalcar/public_html/application/controllers/home.php on line 73

複数のライブラリを問題なくロードする前にコントローラーを持っていたので、これまでこのエラーに遭遇したことはありません。メッセージング ライブラリが存在しないか、読み込まれていないと思われます。クラス宣言と同様に、ライブラリのファイル名の最初の文字が大文字であることを確認しましたが、これは違いがないようです。

以下に示すように、ライブラリを個別にロードします。(ここで読みやすくするために、コントローラーから多くの無関係なコードを削除したことに注意してください)

public function index() {
        ...         

        //Load Helpers
        $this->load->helper('menu');
        $this->load->helper('layout');          

        //Load Libraries
        $this->load->library('pusher');         
        $this->load->library('test');           

        //Load User Details
        $data['userid'] = $this->session->userdata('userid');

        $data['modules'] = getModules($this->layout_model, $this->socialmedia_model);

        //Build Menu
        $data['menuItems'] = buildMenu($this->session->userdata('user_group_id'), $this->config);
        $data['firstName'] = $this->session->userdata('firstName');


        //Unread Messages 
        $options = array(
            'userId'  => $data['userid'],
            'opened' => 0
        );
        $this->load->library('messaging', $options);            
        $data['unreadMessages'] = $this->messaging->getMessages();
        $data['mailIcon'] = (empty($data['unreadMessages'])) ? "mailButton.png" : "mailButtonUnread.png";

誰でもここでガイダンスを提供できますか? ありがとう

編集:これが私のライブラリコードです:

<?php if(!defined('BASEPATH')) exit('No direct script access allowed');

class Messaging extends CI_Controller {

    private $options;
    private $unreadMessages;
    public $mailIcon;

    function __construct($options) {
        parent::__construct();
        $this->load->model('messaging_model');
        $this->load->model('staff_model');
        $this->options = $options;
    }

    function getMessages() {
        $unreadMessages = $this->messaging_model->getMessages($this->options);
        $this->unreadMessagesReturn = array();
        $mailIcon = (empty($unreadMessages)) ? "mailButton.png" : "mailButtonUnread.png";
        if(!empty($unreadMessages)) {
            foreach($unreadMessages as $message) {
                $fromUserDetails = $this->staff_model->getStaffMemberDetails($message['from_id']);
                if((isset($fromUserDetails['profile_image_small'])) && $fromUserDetails['profile_image_small'] != "") {
                    $profileImageSmall = $this->config->base_url() . "images/profileImages/" . $fromUserDetails['profile_image_small']; 
                } else {
                    $profileImageSmall = $this->config->base_url() . "images/noImage.png";
                }
                $name = $fromUserDetails[0]['first_name'] . " " . $fromUserDetails[0]['last_name'];
                $dateSent = date('Y-m-d', strtotime($message['time_sent']));
                $messageTruncated = substr($message['message'], 0, 70) . "...";
                $this->unreadMessagesReturn[] = array(
                    'fromPic'          => $profileImageSmall,
                    'fromName'         => $name,
                    'subject'          => $message['subject'],
                    'message'          => $message['message'],
                    'messageTruncated' => $messageTruncated,
                    'dateSent'         => $dateSent
                );
            }
            return $this->unreadMessagesReturn;
        }
    }       
}

?>

4

3 に答える 3

1

上記のように CI_Controller を拡張せずに $CI = & get_instance(); を含めることで、この問題を解決できました。行を作成し、それを使用して CI ライブラリのメソッドとモデルにアクセスします。

于 2013-10-07T09:49:00.393 に答える
-1
In controller add constructor method
public function __construct()
{
//Here you will load all libraries and models files
}
于 2013-10-04T08:44:51.610 に答える