2009-07-02 25 views
13

Zaczynam od Zend Framework i chciałbym zrozumieć plik Bootstrap. Nauczyłem się, że wszystkie metody są domyślnie wykonywane, ale wydaje mi się to mylące. W każdym razie to nie jest to, o co chciałbym zapytać.Zend Framework Layout

Przyszedłem po akcji $this->bootstrap('layout'); i nie jestem pewien, czy to rozumiem. Czy jest to zmienna resource.layout w pliku application.ini? Chciałbym naprawdę zrozumieć proces bootstrap w głębokim.

Proszę o wyjaśnienia krok po kroku. Z góry dziękuję!

Więc to jest mój plik bootstrap:

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

Wystarczy związana z tym pytaniem na mojego strumienia twitter https://twitter.com/joedevon/status/2464729062, mam nadzieję, że ktoś wkrótce pojawi przez w/dobry szczegółowe wyjaśnienie. Mam go całkowicie działającego, ale nie do końca rozumiem wszystko, co robi :) – joedevon

+0

$ this-> bootstrap ('layout'); Ta linia zapewnia, że ​​układ został skonfigurowany przed uruchomieniem reszty funkcji _initViewHelpers(). – berty

Odpowiedz

1

I odkryli, że: Wzywanie $ this-> boostrap ('zasobów'); nie zadziała, jeśli "zasób" nie znajduje się w pliku application/configs/application.ini. Tak więc moja odpowiedź na twoje pytanie brzmi "tak", musisz zdefiniować zasób układu w pliku application.ini przy użyciu: resources.layout.layoutPath = APPLICATION_PATH "/ layouts/scripts" (lub innego reż.)

Niestety dokumentacja Zend Framework jest naprawdę kiepska w mojej opinii. Zwłaszcza na ten temat.

Moim zdaniem powinieneś poczekać na wersję z lepszą dokumentacją, jeśli chcesz zagłębić się w szczegóły i funkcjonowanie Zend Framework (lub możesz sprawdzić kod źródłowy Zend Library Classes, jeśli masz czas).

+2

Tak, w tym przypadku instrukcja ZF zawiera mnóstwo bzdur i brak przykładów. Naprawdę źle. Mam nadzieję, że wkrótce pojawią się tutoriale lub lepsza instrukcja obsługi. –

+2

Instrukcja ZF jest trochę ułomna i przypomina trochę wiki/tutorial. Jeśli jednak nadal czytasz i zachowujesz programowanie za pomocą ZF, w końcu zrozumiesz wszystkie części, z którymi pracujesz - przynajmniej tak to było dla mnie. Dokumenty obejmują większość rzeczy, ale są rozproszone tu i tam. Tak więc, aby uzyskać głębsze zrozumienie tego, co się dzieje, potrzeba wiele ekspozycji i manipulacji. Powodzenia! –

2

Odwołaj się do tej documentation poszukać dostępnych opcji.

Zend_Application automatycznie uruchomi wszystko w pliku application.ini, które zaczyna się od zasobów.

Pamiętaj, że jeśli nie umieścisz czegoś w pliku ini, nie zostanie on załadowany. Na przykład. domyślnie nie ładuje się układu. Jeśli to albo jeden lub oba, o następującym układzie zostaną włączone do aplikacji:

resources.layout.layoutPath = APPLICATION_PATH "/layouts" 
resources.layout.layout = default 

Najważniejszym aby zdać sobie sprawę, że będzie to załadować ustawienia domyślne, w którym pominięto wartości, pozwól mi wyjaśnić: Poprzez domyślnie bootstrap nie ma dostępnego zasobu widoku, ponieważ żadna nie jest ustawiona w ini. Ale jeśli umieścisz to w INI:

resources.view[] = 

to można nazwać:

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

Następnie można zrobić coś z myślą o aplikacji z bootstrap, np

$view->doctype("HTML5"); 

Również Twój _initAutoload nie jest już konieczne, a można zastąpić

appnamespace = "" 

w .ini. Zgadzam się, że opcje bootstrapowania i ini są bardzo słabo udokumentowane.

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

indziej dla hands-on learning:

protected function _initIniDump() 
{ 
    $ini = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development'); 
    Zend_Debug::dump($ini->toArray(), 'APPLICATION.INI');die(); 
} 

W tym wysypisku widać, że Zend będzie iteracyjne nad tablicy zasobów, cokolwiek, że uznaje, że ładuje się najlepiej na jego wiedza

:)

nadzieję, że pomoże.

6

Linia z application.ini

resources.layout[] = 

odpowiada:

_initLayout() {} 

w Bootstrap.php

Obaj są inicjowanie nowego obiektu, a obiekt ten jest ustawiony jako bootstrap param, który jest kontenerem dla niektórych zasobów aplikacji (wartości zwracane przez metody _init).

Nie są wykonywane jedna po drugiej, tak aby zapewnić jeden zasób został zainicjowany przed obecnym, wymusić porządek, używając:

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

_initOtherResource() { 
    // .. 
} 

Więc kolejność instancji zasobów jest:

  1. otherResource
  2. someResource

Teraz możesz również użyć:

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

Uwaga, które można napotkać Circular Dependency błąd podczas próby wykonania siebie przed każdym z nich.

Możesz użyć tylu różnych metod, ile potrzebujesz, ale aby je ponownie wykorzystać, możesz oddzielić je od własnej klasy, implementując klasę Zend_Application_Resource_Abstract.

Jest kilka z zasobów aplikacji, które można znaleźć w katalogu Zend/Application/Resource. Są to środki, jesteś refering od application.ini, tj .:

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 

nadzieję, że to bardziej jasne teraz.