実現したいこと
Codeigniter3で作っているウェブアプリをCodeIgniter4に移行しています。
自作のコントローラーは、Controllerクラスを継承しています。ユーザーズガイドには、コンストラクタで親クラスのコンストラクタを呼べという記載があります。ですが、このコードでエラーが出てしまいます。エラーメッセージは「Cannot call constructor 」です。
system/Controller.php を見てみると、__construct()はありません。親クラスにその関数はないから呼べないということだと思います。
この行を削除するとエラーはなくなります。問題なのですが、ユーザーズガイドにこのコードを必ず入れろと書いてあるので飛ばしてしまっていいのか困っています。
■日本語ユーザーズガイド
もしコントローラのコンストラクタを使いたいなら、次のコードをコンストラクタに 必ず 書かなければなりません:
parent::__construct(...$params);
https://ci-trans-jp.gitlab.io/user_guide_4_jp/general/controllers.html
英語のサイトを見てみると、initController()という別のコンストラクタがあると記載があります。
「PHPのコンストラクタ__construct()が実行された後にフレームワークに呼ばれる」そうです。
https://codeigniter4.github.io/CodeIgniter4/incoming/controllers.html#constructor
教えていただきたいのは次の2つです。
- 上記の日本語ページの、親クラスの__construct()を必ず呼べという記載が間違っているのでしょうか?
- CodeIgniter3まではControllerクラスのコンストラクタを呼び出していましたが、CodeIgniter4ではinitController()がどこかで勝手に呼ばれるから、自分のクラスの__construct()では、親クラスのコンストラクタに関しては何もしなくていいということなのでしょうか?
宜しくお願い致します。
発生している問題・エラーメッセージ
Cannot call constructor
該当のソースコード
namespace App\Controllers; use CodeIgniter\Controller; class MyClass extends Controller { public function __construct() { parent::__construct(); //この行でエラーが出ます。 } public function index(): string { return view('welcome_message'); } }
試したこと
エラーの行を削除すると、エラーはなくなります。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2024/03/04 10:15