web-dev-qa-db-ja.com

codeigniterが「メッセージ:未定義のプロパティ:Welcome :: $ load」を返し、ヘルパーライブラリをロードしようとしています

enter image description here

背景情報

CIの新しいコピーをインストールし、ウェルカムコントローラーを変更してURLヘルパーを含め、メソッド_base_url_を呼び出せるようにしました。次に、このメソッドを_home.php_から呼び出そうとします

問題:次のエラーメッセージが表示されます。

_Message: Undefined property: Welcome::$load
Filename: controllers/welcome.php
_

コード:

これが私のウェルカムコントローラーの外観です。

_class Welcome extends CI_Controller {
    public function __construct()
    {
        $this->load->helper('url');     
    }   

    public function index()
    {
        $this->load->view('home');
    }
}
_

ビューは次のようになります。

_<!DOCTYPE html> 
<html lang="en">
  <head>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge"/>
    <meta charset="utf-8">
    <meta name="viewport" content="width = device-width">    
    <meta name="description" content="">
    <!-- Le styles -->    
    <title>test site</title>
    <script>   
      var BASEPATH = "<?php echo base_url(); ?>";
    </script>
    <link href="<?php echo base_url('assets/css/bootstrap.min.css')?>" rel="stylesheet">
    <link href="<?php echo base_url('assets/css/navbar.css')?>" rel="stylesheet">    
  </head>
_

システムがコントローラーのコンストラクターの行で終了し、ライブラリをロードしようとしています...

これまでに行ったこと:

  1. マニュアルを読んでください。 https://www.codeigniter.com/user_guide/helpers/url_helper.html
  2. 次のようにconfig/autoload.phpにurlライブラリを含めようとしました:

    $autoload['helper'] = array('url');

しかし、まだエラーが発生します。助言がありますか?

ありがとう。

スクリーンショット:

11
dot

あなたは重要なことを忘れました。

class Welcome extends CI_Controller {
    public function __construct()
    {
        parent::__construct();
        $this->load->helper('url'); //Loading url helper    
    }   

    public function index()
    {
        $this->load->view('home'); //Loading home view
    }
}

parent::__construct。そうしないと、独自のコントローラーで__constructをオーバーライドすると、コントローラーはその抽象レイヤーを継承しません。

__constructを上書きしない限り、問題はありません。オーバーライドした場合にのみ発生します。 WelcomeクラスはCI_Controllerを拡張している(ただし__constructオーバーライドがある)場合でも、Welcomeクラスは空(継承なし)であるため、load機能はありません。

40
user1467267