0

doctrine2サンドボックスをデフォルトのZendFrameworkアプリと統合しようとしています。コントローラで名前空間を使用しようとすると、「無効なコントローラクラス( "IndexController")」エラーが発生します

これは動作します:

use Entities\User, Entities\Address;


class IndexController extends Zend_Controller_Action
{
...
}

これはしません(しかしすべきですか?):

namespace Entities;


class IndexController extends \Zend_Controller_Action
{
...
}
4

2 に答える 2

3

最初の例では、名前空間をコントローラーにインポートしています。2番目の例では、コントローラーを名前空間に割り当てています。

名前空間をインポートすると、完全修飾クラス名を使用しなくてもクラスを参照できます。

new \Entities\User() // without import
new User() // with import

コントローラに名前空間を割り当てると、実際にはクラスの完全修飾名が変更されます。

new \IndexController() // without namespace
new \Entities\IndexController() // with namespace

(名前空間内のクラスは、同じ名前空間内の他のクラスを「使用」することなく常に参照できます。これが、オプション2を使用しようとした主な理由であると思われます)。

ZendFramework1.10はまだ名前空間を認識していません。URLを解析してコントローラーを読み込もうとすると、デフォルトのグローバル名前空間でのみ検索\IndexControllerされ、ユーザー定義の名前空間()に割り当てられていることはわかりません\Entities\IndexController

ZFでコントローラーを操作するときは、コントローラーに名前空間を割り当てないことをお勧めします。インポートは正常に機能します。名前空間が完全にサポートされるまで、ZF2.0まで待つ必要があります。

于 2010-09-03T19:55:47.827 に答える
0

マニュアルを読み、このページの一部を読んだ後、PHPで名前空間を宣言して構築する場合は、2番目の構文を使用しているように見えます。つまり、次のようなオブジェクトが作成されます

Entities\IndexController 

そのため、Zendではもう見つかりません。

それらのサイトによると、名前空間をインポートして使用するには、useを使用する必要があります。

そのため、最初の例では機能し、2番目の例では機能しません。

私が正しいことを願っています、そしてこれが助けになります!

于 2010-09-03T04:46:26.627 に答える