2009-07-02 9 views
13

私はZend Frameworkを使い始めています。私はBootstrapファイルを理解したいと思います。私はすべての_initメソッドがデフォルトで実行されていることを学んだが、それは私に混乱しているようだ。とにかくそれは私が尋ねたいものではありません。Zend Framework Layout

Aは$this->bootstrap('layout');の動作になりました。これを理解しているかどうかはわかりません。これはapplication.iniファイルのresource.layout変数ですか?私は深くのブートストラッププロセスを本当に理解したいと思います。

ステップバイステップの説明をお願いします。 ありがとうございます!

だからこれは私のブートストラップファイルである:私はことを見出した

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initAutoload() 
    { 
     $moduleLoader = new Zend_Application_Module_Autoloader(array(
      'namespace' => '', 
      'basePath' => APPLICATION_PATH 
     )); 
     return $moduleLoader; 
    } 

    function _initViewHelpers() 
    { 
     $this->bootstrap('layout'); 

     $layout = $this->getResource('layout'); 
     $view = $layout->getView(); 
     $view->doctype('XHTML1_STRICT'); 
     $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8'); 
     $view->headTitle()->setSeparator(' - '); 
     $view->headTitle('Zend Framework Tutorial'); 
    } 
} 
+0

私のtwitterストリームhttps://twitter.com/joedevon/status/2464729062でこの質問にリンクしているだけで、うまくいけば、誰かがすぐに詳細な説明が表示されます。私はそれが完全に働いているが、それがやっているすべてを完全に理解していない:) – joedevon

+0

$ this-> bootstrap( 'layout'); この行は、残りの_initViewHelpers()が実行される前に 'レイアウト'が設定されていることを確認しています。 – berty

答えて

1

:>ブートストラップ( 'リソース')の$ this - を呼び出します。 'resource'がapplication/configs/application.iniファイルにない場合は動作しません。あなたの質問に対する私の答えは「はい」ですので、application.iniファイルのレイアウトリソースをresources.layout.layoutPath = APPLICATION_PATH "/ layouts/scripts"(または別のディレクトリ)と定義する必要があります。

残念ながら、私の意見ではzend Frameworkのドキュメントは本当に悪いです。特にこのトピックについて。

私の意見では、Zend Frameworkの詳細と動作を深く知りたい場合は、より良いドキュメントを含むバージョンを待つべきです(または、Zend Frameworkクラスのソースコードを確認することができます。時間)。

+2

はい、この場合はZFマニュアルだけであり、例はありません。すごく悪い。私はすぐにチュートリアルが/ /またはより良いマニュアルがあることを願っています。 –

+2

ZFマニュアルは、時には少し不自由なもので、wiki /チュートリアルのようなものです。しかし、読書を続けてZFでプログラミングを続けていると、最終的にはあなたが作業するすべての部分を理解することができます。ドキュメントはほとんどのものをカバーしていますが、ここには散在しています。だから、何が起きているのかをより深く理解するためには、多くの露出と手間を要します。がんばろう! –

2

利用可能なオプションについてはdocumentationを参照してください。

Zend_Applicationは自動的にリソースで始まるapplication.ini内の何かをブートストラップします。

あなたのiniファイルに何かを置かないと、そのファイルはロードされません。例えば。デフォルトではレイアウトはロードされません。あなたが含まれている場合、レイアウトはアプリケーションのために有効になり、次のいずれか、または両方を、:で:

最も重要なの
resources.layout.layoutPath = APPLICATION_PATH "/layouts" 
resources.layout.layout = default 

実現するためには、それは私が説明させて、あなたが値を省略しているデフォルト値をロードすることですデフォルトでは、ブートストラップにはビューリソースがありません。これは、iniファイルには何も設定されていないからです。しかし、あなたがiniファイルでこれを置く場合:

resources.view[] = 

を、あなたが呼び出すことができます。

$this->boostrap('view'); 
$view = $this->boostrap()->getResource('view'); 

その後、あなたは、例えば、ブートストラップから、アプリケーションのビューで何かを行うことができます

$view->doctype("HTML5"); 

はまた、あなたの_initAutoloadはもう必要ありません、との.iniで

appnamespace = "" 

に置き換えることができます。私は、ブートストラッピングとiniのオプションが非常によく文書化されていないことに同意します。

/////////////////////////////////////////////////////////////////////////////

protected function _initIniDump() 
{ 
    $ini = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development'); 
    Zend_Debug::dump($ini->toArray(), 'APPLICATION.INI');die(); 
} 
:ハンズオン学習のための他の//////////////////////////////////

そのダンプあなたはそれを最大限にロードし、Zendのは、リソースの配列、それは認識し何を反復することがわかりますで

は知識

役立ちます

:)

希望です。

6

application.ini

resources.layout[] = 

からラインと等価である:Bootstrap.php

_initLayout() {} 

それらの両方が新しいオブジェクトを初期化され、そしてこのオブジェクトはbootstrap PARAMとして設定されています、これは、いくつかのアプリケーションリソース(_initメソッドによって返される値)のコンテナです。

_initSomeResource() { 
    $this->bootstrap('otherResource'); 
    // .. 
    return $someValue; 
} 

_initOtherResource() { 
    // .. 
} 

だからリソースのインスタンス化の順序は次のとおりです:

使用して、順序を強制するので、一つのリソースが現在の前に初期化されていることを確認するために、1つずつあり、実行されている

  1. otherResource
  2. someResource

は今、あなたはまた、使用することができます:あなたが各1の前にお互いを実行しようとしたときに、Circular Dependencyエラーが発生する可能性があること

$bootstrap->getParam('someResource'); // returns $someValue 

注意を。

_initメソッドは必要なだけ使用できますが、再利用可能にするには、Zend_Application_Resource_Abstractクラスを実装する独自のクラスに分けてください。

Zend/Application/Resourceディレクトリにあるアプリケーションリソースがあります。これらはすなわち、あなたがapplication.iniから参照のうえされ、リソースです。:

resources.view.encoding = "utf-8" ; in application.ini 
Zend/Application/Resource/View.php (path to the resource class) 
Zend_Application_Resource_View::setEncoding('UTF-8'); // equivalent pseudocode 

は今より明らかだと思います。