5

モデル (たとえば、named ) をインスタンス化したい場合はPost、次のように呼び出すだけです。

$post = new Post();

ここで、インスタンス化することも必要ですController(たとえば、という名前Postの、このコントローラーの という名前の php ファイルPostController.php)。だから私はこのコードを使用します:

$postController = new PostController();

ただし、このコードを実行するとエラーが発生します。

いくつかの検索を行ったところ、インスタンス化するには次のようにする必要があることがわかりました。

$postController = Yii::app()->createController('post/index');

正しく実行されます。しかし、なぜ最初のアプローチが機能しないのだろうか?

4

2 に答える 2

6

「なぜ最初のアプローチが機能しないのか」という正確な質問に答えます。フォルダー/protected/controllerは、プロジェクトの「インクルード パス」にはありません。

'import'=>array('application.controllers.*')構成ファイルに 追加するか、使用するだけですinclude(Yii::app()->getBasePath().DIRECTORY_SEPARATOR.'controllers'.DIRECTORY_SEPARATOR.'PostController.php');

PostController のオブジェクトを作成する直前。ああ、新しいコントローラーを作成するには、このコントローラーの名前が必要なので、次のようにする必要があります

$controller = new PostController('post_controller');

プロジェクトから完全に分離されたコントローラーを作成しているため、このタイプのコントローラーの作成は Yii では役に立たないことを指摘したいと思います。したがって、ほとんど役に立ちません。ご指摘のとおり、コントローラーを作成する正しい方法はYii::app()->createController()

于 2012-08-02T07:46:33.863 に答える
1

使用するだけです:

 $controller = Yii::app()->controller;

これにより、リクエストに対して現在のコントローラーが返されます。

こちらのドキュメントも参照してください: http://www.yiiframework.com/doc/api/1.1/CApplication#controller-detail

于 2012-08-02T06:28:48.323 に答える