13

Zend Frameworkの現在の安定バージョン(1.11)で、PHP名前空間を使用してアプリケーションクラスを操作することは可能ですか?

Application\Form\Abc instead of Application_Form_Abc
Application\Model\Xyz instead of Application_Model_Xyz
etc.

v1.10以降、ZFは名前空間の自動読み込みをサポートしており、名前空間ライブラリを含めると正常に機能しますが、アプリケーションクラスで同じジョブを実行しようとすると失敗しました。

4

2 に答える 2

8

実際には、ZF課題追跡システムでDmitryによって提案された簡単な回避策があります。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoloader()
    {
        $loader = function($className) {
            $className = str_replace('\\', '_', $className);
            Zend_Loader_Autoloader::autoload($className);
        };

        $autoloader = Zend_Loader_Autoloader::getInstance();
        $autoloader->pushAutoloader($loader, 'Application\\');
    }
}

私にとっては魅力のように機能します!

于 2011-06-29T12:20:41.870 に答える
6

1.12で導入された標準のオートローダーを使用すると、最小限の労力で名前空間を使用できます。

require 'Zend/Loader/AutoloaderFactory.php';
Zend_Loader_AutoloaderFactory::factory([
    'Zend_Loader_StandardAutoloader' => [
        'autoregister_zf' => true,
        'namespaces' => [
            'Application' => '/path/to/Application/src',
        ]
    ]
]);

これで、 etcApplication\Form\Abcの代わりにApplication_Form_AbcApplication\Model\Xyzの代わりに使用できます。Application_Model_Xyz

ディレクトリ/ファイル構造の例:

path / to / Application / src / Form / Abc.php

<?php
namespace Application/Form;
class Abc {}

path / to / Application / src / Model / Xyz.php

<?php
namespace Application/Model;
class Xyz {}
于 2013-06-04T21:30:19.293 に答える