doctrine2 Zend Frameworkのnamespaceingコントローラ
-
26-09-2019 - |
質問
私は、デフォルトのZend Frameworkのアプリでdoctrine2サンドボックスを統合しようとしています。私は、コントローラに名前空間を使用しようとすると、私はエラー
「無効なコントローラクラス( 『IndexControllerを』)」を取得しますこの作品ます:
use Entities\User, Entities\Address;
class IndexController extends Zend_Controller_Action
{
...
}
これはしていません(ただし、してください):
namespace Entities;
class IndexController extends \Zend_Controller_Action
{
...
}
解決
あなたの最初の例では、コントローラに名前空間をインポートしています。あなたの2番目の例では、名前空間にコントローラを割り当てるされます。
名前空間をインポートするユーザーに自分の完全修飾クラス名をせずに参照クラスになります。
new \Entities\User() // without import
new User() // with import
あなたのコントローラに名前空間を割り当てると、実際にあなたのクラスの完全修飾名を変更します。
new \IndexController() // without namespace
new \Entities\IndexController() // with namespace
(名前空間内のクラスは常に「使用」になくても、その同じ名前空間内の他のクラスを参照することができます。私はそれはあなたが使用オプション2にしようとしていた主な理由だった疑いがある)。
Zend Frameworkの1.10は、まだ名前空間無知です。 URLを解析し、コントローラをロードしようとすると、それだけで\IndexController
のデフォルトのグローバル名前空間に見て見て、それがユーザー定義の名前空間(\Entities\IndexController
)に割り当てられていますという考えを持っていません。
私の推薦は、ZFのコントローラを操作する場合、それらに割り当てない名前空間を行うということです。作品の罰金をインポートします。私たちは、完全な名前空間のサポートのためにZF 2.0まで待たなければならないでしょう。
他のヒント
スルーマニュアルに行くと、いくつかのを読んだ後このページでは、それはそれでを思わをPHPは、あなたが宣言し、あなたの2番目の構文を使用して名前空間を周囲に構築したいとき。だから、
のようなオブジェクトを作成しますEntities\IndexController
そのようZendのではもう見られない。
これらのサイトによると、あなたはそれを名前空間をインポートして使用するために使用を使用する必要があります。
ザッツなぜそれがあなたの最初の例ではなく、あなたの二番目に働きます。
希望私は右だと、これは役立ちます!