0

PHP名前空間を既存のZendFrameworkプロジェクト(v1.12)に統合しようとしています。動作しているコントローラーの上部に名前空間を追加すると、それが機能しなくなり、アプリケーションがInvalid controller classエラーをスローします。これが私のコントローラーの定義です:

namespace MyProject\Controller;

use MyProject\Controller\MyRestController;

class MyFooController extends MyRestController
{
}

Bootstrap.php:内のinitメソッド

protected function _initAutoload()
{
    $autoloader = Zend_Loader_Autoloader::getInstance();
    $autoloader->registerNamespace('MyProject');
    return $autoloader;
}
4

2 に答える 2

0

私は今、同様の問題に直面しています。私にとってこれは、Zend が名前空間のコントローラー名を適切に解決できないように見えます。したがって、たとえば IndexController を名前空間 \Basic\Controller に配置すると、Zend が存在しない \IndexController クラスをロードしたいため、ロードされません。

メソッドgetControllerNameを持つ標準のzendルータークラスを拡張することを考えています。

次に、次の方法でこれをブートストラップに設定できます。

$router = new \My\Namespaced\Router();

$front = Zend_Controller_Front::getInstance();
$front->setRouter($router);

私はまだそのコードを試していませんが、これはうまくいくはずです。

于 2013-06-27T11:56:04.597 に答える
0

単なる推測です (ZF をかなり長い間使用していません)。Zend は、フレームワークの基本コントローラー クラスから拡張されたクラスのみをコントローラーとして受け入れます。フレームワークの基本コントローラー クラスから拡張しないため、エラーが表示されます。

それが理由である場合は、最初に基本フレームワーク コントローラ クラスから拡張したか、必要なインターフェイスを実装したことに注意してください。

namespace MyProject\Controller;

class MyRestController extendes Zend_Framework_Base_Controller_Class_Name_Here
{
    ...

psuse MyProject\Controller\MyRestController;そのクラスはすでにその名前空間にあるため、不要に見えます。コードを確認してみましょう。

namespace MyProject\Controller;

これにより、ファイルの名前空間が設定されます。つまり、非 FQCN はそれに解決されます。例えば:

new MyRestController();

次の FQCN に解決されます。

new MyProject\Controller\MyRestController

どの - おは!- まさにあなたが使用中に書いたものです:

use MyProject\Controller\MyRestController;

つまり、このuse句は不要であり、拡張は次のとおりです。

class MyFooController extends MyRestController

とにかく最初はそれに行きます。同じ名前空間だからです。

于 2012-12-24T18:51:47.567 に答える