4

おはようございます、私は古典的なアプリケーションを持っています。ArticleController を UserController から拡張したいと思いますが、試してみると

class ArticleController extends UserController
{
    // ...
}

また

class ArticleController extends Application_Controllers_UserController
{

}

Fatal error: class ... not found... Zend Framework でコントローラを別のコントローラから拡張するにはどうすればよいですか?

4

2 に答える 2

4

コントローラーのクラス名の自動読み込みは、アプリケーションでアクセスできるものではなく、このような場合を除いて必要なものではありません。

拡張したいコントローラを含むファイルを手動で含める/要求する必要があります。

<?php
require_once 'UserController.php'; // no adjustment to this path should be necessary

class ArticleController extends UserController
{
    // ...
}

ビュー スクリプトは、views/scripts/user ではなく、views/scripts/article から引き続き提供されることに注意してください。必要に応じて、各アクションでビュー パスを調整できます。

コメントで述べたように、require_once ステートメントのパスを変更する必要はありませんが、必要に応じて変更できます (例require_once APPLICATION_PATH . '/modules/test/controllers/UserController.php';)

于 2011-12-28T18:50:38.950 に答える
1

たとえば、ブートストラップでそのようなことを行う前に、オートローダーを適切に初期化する必要があります。特に、Zend の標準コントローラ ディレクトリでコントローラを拡張する場合。

$namespace = 'Application';
$basePath = APPLICATION_PATH;
$autoloader = new Zend_Loader_Autoloader_Resource(array('namespace' => $namespace, 'basePath' => $basePath));
$autoloader->addResourceTypes(array('type' => 'controllers', 'path' => '/controllers', 'namespace' => 'Controller'));

Application_Controller_[YourControllerName] でアクセスできるようになりました。

モジュラー アプリケーションを使用している場合は、'Application' を常にモジュール名に置き換えるか、空白のままにしておくことができます。

于 2012-08-06T08:52:00.877 に答える