1

これがZFマニュアル_initのメソッドのサンプルです。最後にコマンドがあります:Zend_Bootstrapreturn

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Initialize view
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');
        $view->headTitle('My First Zend Framework Application');

        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Return it, so that it can be stored by the bootstrap
        return $view;    // Why return is here?
    }
}

ブートストラップで保存できます

なぜ戻るのですか?ブートストラップはそれをどこに保存し、なぜですか?どのオブジェクトがこのメソッドを呼び出し、誰が結果を取得しますか?そして、戻ってこない場合はどうなりますか?

アップデート:

利用可能なリソースプラグインページのについてのセクションではView、次の開始方法が示されていますZend_View

構成オプションは、Zend_Viewオプションごとにあります。

例22サンプルビューのリソース構成

以下は、ビューリソースを構成する方法を示すサンプルINIスニペットです。

resources.view .encoding = "UTF-8"

resources.view .basePath = APPLICATION_PATH "/ views /"

そして、Zend_Applicationクイックスタートページに書かれている他のすべてのリソースと一緒に、ファイルViewからこの方法を開始するのは便利で合理的だと思われます。application.iniしかし同時に、同じZend_Applicationクイックスタートページで、 :Viewから開始する必要があると言われています。Bootstrap

次に、カスタムビューリソースを追加します。ビューを初期化するときに、HTMLDocTypeとHTMLヘッドで使用するタイトルのデフォルト値を設定する必要があります。これは、Bootstrapクラスを編集してメソッドを追加することで実現できます。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        // Initialize view
        $view = new Zend_View();
        $view->doctype('XHTML1_STRICT');     // the same operations, I can set this in application.ini
        $view->headTitle('My First Zend Framework Application');   // and this too

        // Add it to the ViewRenderer
        $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
            'ViewRenderer'
        );
        $viewRenderer->setView($view);

        // Return it, so that it can be stored by the bootstrap
        return $view;
    }
}

そして、他のリソースでより興味深いイベントRequest、例えばここで

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initRequest()
    {
        // Ensure the front controller is initialized

        $this->bootstrap('FrontController');   // why to initialized FC here if it is going to be initialized in application.ini anyway like resource.frontController.etc?

        // Retrieve the front controller from the bootstrap registry
        $front = $this->getResource('FrontController');

        $request = new Zend_Controller_Request_Http();
        $request->setBaseUrl('/foo');
        $front->setRequest($request);

        // Ensure the request is stored in the bootstrap registry
        return $request;
    }
}

したがって、彼らはこの方法またはその方法でリソースを開始する選択肢を提供しているようです。しかし、どちらが正しいのでしょうか?なぜ彼らはそれらを混ぜるのですか?どちらを使用するのが良いですか?

FC実際、私はこれらの行をすべて削除することができますapplication.ini

resources.frontController.baseUrl = // some base url
resources.frontController.defaultModule = "Default"
resources.frontController.params.displayExceptions = 1

次のように書き直します。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
    {
        protected function _initFrontController()
        {

            $this->bootstrap('FrontController');
            $front = $this->getResource('FrontController');
            $front->set ...  
            $front->set ...   // and here I set all necessary options

            return $front;
        }
    }

application.ini方法と方法の違いは何_initResourceですか?この違いは、仕事で何か深刻なことを意味しますか?

4

1 に答える 1

1

しばらくしてzendマニュアルを読んだ後、答えが得られたでしょうが。しかし、私はあなたの質問に答えようとします。

1.なぜ戻るのですか?

戻る必要はなく、必須ではありませんが、戻り値
は、通常はZendレジストリであるzendコンテナに変数を格納するためにのみ使用されます。この格納された変数には、必要な場所からどこからでもアクセスできます。唯一の違いは、変数をどこにもフェッチできないことです。答えを書いている間、zendマニュアルで以下を見つけました。きっと役に立ちます。

例として、基本的なビューリソースについて考えてみます。

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initView()
    {
        $view = new Zend_View();
        // more initialization...

        return $view;
    }
}
You can then check for it and/or fetch it as follows:

// Using the has/getResource() pair:
if ($bootstrap->hasResource('view')) {
    $view = $bootstrap->getResource('view');
}

// Via the container:
$container = $bootstrap->getContainer();
if (isset($container->view)) {
    $view = $container->view;
}

2.ブートストラップがそれを格納する場所とその理由は?

私は最初のものがこれに答えると思います。

3.どのオブジェクトがこのメソッドを呼び出し、誰が結果を取得しますか?

アプリケーションオブジェクトは通常(最初に)ブートストラップを呼び出し、オブジェクトを介して個々のリソースメソッドを呼び出すこともできます。ただし、ブートストラップメソッドの呼び出し中にパラメータを指定しない場合、すべてのリソースメソッド(たとえば、_initView()、_ initRouters())が実行されます。

4.返品がない場合はどうなりますか。

1で答えたと思います。

これはあなたが探しているほとんどすべての答えを含んでいます。 http://framework.zend.com/manual/1.12/en/zend.application.theory-of-operation.html

それが役に立てば幸い。

アップデート:

あなたのアップデートを見ました..実際、それは私が思う選択の問題です。

リソースを定義する場所はあなた次第です。

基本的なリソースのみがapplication.iniファイルで定義され、ほとんどのリソースがブートストラップからロードされるプロジェクトに取り組んでいます...

ただし、リソースをロードするためにブートストラップを使用する場合(カスタムルートの定義など)、快適さと柔軟性を感じることができます。

それが私が感じていることです。

于 2012-10-16T02:32:15.603 に答える