Zend Framework-モジュールコントローラーを拡張します
-
05-10-2019 - |
質問
次のディレクトリ構造があります。
modules/
api/
controllers/
ApiController.php
InventoryController.php
OtherController.php
init()メソッドは複数のコントローラーの間で一般的であるため、次のような親コントローラークラスにそれをリファクタリングしたいと思います。
class Api_ApiController extends Zend_Controller_Action
{
public function init()
{
// common code
}
}
私が試してみるとき:
class Api_InventoryController extends Api_ApiController
わかりました:
致命的なエラー:class 'api_apicontroller'は/application/modules/api/controllers/inventorycontroller.phpにありません。
Zend Frameworkがモジュール/API/Controllers/Apicontroller.phpにMap API_APICONTROLLERをマップしないのはなぜですか?
アピコントローラーをライブラリに配置し、名前空間を登録することで、これを回避する方法を見つけましたが、それは私にとってはハックのように思えます。
解決
「問題」は、コントローラーが通常介してロードされるため、ZFがオートローダーのコントローラーディレクトリを登録しないことです。 Zend_Controller_Dispatcher
. 。 Zend_Application_Module_Autoloader
, 、それは一方でブートストラッパーにインスタンス化されていますレジスタのみ
'dbtable' => array(
'namespace' => 'Model_DbTable',
'path' => 'models/DbTable',
),
'mappers' => array(
'namespace' => 'Model_Mapper',
'path' => 'models/mappers',
),
'form' => array(
'namespace' => 'Form',
'path' => 'forms',
),
'model' => array(
'namespace' => 'Model',
'path' => 'models',
),
'plugin' => array(
'namespace' => 'Plugin',
'path' => 'plugins',
),
'service' => array(
'namespace' => 'Service',
'path' => 'services',
),
'viewhelper' => array(
'namespace' => 'View_Helper',
'path' => 'views/helpers',
),
'viewfilter' => array(
'namespace' => 'View_Filter',
'path' => 'views/filters',
)
したがって、ベースコントローラースクリプトを含むどちらかです require_once
または、オートローダーを修正して、コントローラーディレクトリも含めます。
他のヒント
重く編集。私の以前の答えを無視してください。質問を誤解しました。私の側の不注意。
ブートストラップにオートローダーをインスタンス化しましたか?何かのようなもの:
protected function _initAutoloader()
{
$autoloader = new Zend_Application_Module_Autoloader(array(
'namespace' => '',
'basePath' => APPLICATION_PATH . '/modules',
));
return $autoloader;
}
所属していません StackOverflow