2009-07-02 26 views
13

Zend Framework ile başlıyorum ve Bootstrap dosyasını anlamak istiyorum. Tüm _init yöntemlerinin varsayılan olarak yürütüldüğünü öğrendim ama bana kafa karıştırıcı geliyor. Her neyse, sormak istediğim şey bu değil.Zend Framework Düzeni

$this->bootstrap('layout'); eyleminin etrafında geldi ve bunu anladığımdan emin değilim. Application.ini dosyasındaki resource.layout değişkeni bu mu? Önyükleme işlemini derinlemesine anlamak isterim.

Adım adım açıklama yapmanızı rica ediyorum. Şimdiden teşekkürler!

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

Sadece twitter stream https://twitter.com/joedevon/status/2464729062 üzerinde bu soruya bağlı, umarım birisi kısa bir w/iyi bir açıklama ile açılır. Tamamen çalışıyorum ama yaptığım her şeyi tamamen anlamadım :) – joedevon

+0

$ this-> bootstrap ('layout'); Bu satır, _initViewHelpers() 'ın geri kalanı çalıştırılmadan önce "düzen" ayarının yapılmasını sağlar. – berty

cevap

1

bunu öğrendim:

Yani bu benim önyükleme dosyası $ this- çağıran> boostrap ('kaynak'); 'resource' uygulama/configs/application.ini dosyasında değilse işe yaramaz. Bu nedenle, sorunuza cevabım 'evet' olur, application.ini dosyasındaki layout kaynağını aşağıdaki ile tanımlamanız gerekir: resources.layout.layoutPath = APPLICATION_PATH "/ layout/scripts" (veya başka bir dir.)

Maalesef zend Framework belgeleri bence gerçekten kötü. Özellikle bu konuda.

Benim düşüncem, Zend Framework'ün ayrıntılarına ve çalışmalarına derinlemesine bakmak istiyorsanız, daha iyi bir dokümantasyona sahip bir sürüm beklemeniz gerekir (ya da Zend Kitaplığı Sınıflarının kaynak kodunu kontrol edebilirsiniz. zaman).

+2

Evet, bu durumda ZF el kitabı sadece bir miktar saçmalık ve örnek yok. Gerçekten kötü. Umarım yakında bazı dersler veya daha iyi el kitapları olacaktır. –

+2

ZF kılavuzu, zaman zaman bir wiki/öğretici gibi biraz gevşek. Bununla birlikte, eğer ZF ile programlama materyallerini okumaya devam ederseniz, en nihayetinde birlikte çalıştığınız tüm parçaları anlarsınız - en azından bu benim için nasıldı. Dokümanlar çoğu şeyi kapsar, ancak burada ve orada dağılmışlardır. Bu yüzden neler olup bittiğini daha iyi anlayabilmek için pek çok pozlama ve işe yarıyor. İyi şanslar! –

2

Mevcut seçenekler için bu documentation'a bakın. Zend_Application, kaynaklarla başlayan application.ini dosyasında otomatik olarak önyükleme yapar.

Ini dosyanıza bir şey koymazsanız, yüklenmeyeceğini unutmayın. Örneğin. varsayılan olarak hiçbir düzen yüklenmez. Eğer uygulama için etkin olacak aşağıdaki düzen bunlardan birini veya her ikisini de eklerseniz:

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

gerçekleştirmek için en önemli bu değerleri atladık varsayılan değerlerini yüklemek açıklamama izin verin olmasıdır: By öntanımlı olarak bir önizleme kaynağı olmayacaktır, çünkü ini'de hiçbiri ayarlanmamıştır. Eğer ini bu koyarsanız Ama:

resources.view[] = 

o zaman arayabilirsiniz:

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

Sonra bootstrap, örneğin gelen uygulamanızın görünümü ile bir şeyler yapabiliriz

$view->doctype("HTML5"); 

Ayrıca, _initAutoload artık gerekli değildir ve .ini içindeki

appnamespace = "" 

ile değiştirilebilir. Önyükleme ve ini seçeneklerinin çok zayıf bir şekilde belgelendiğini düşünüyorum.

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

uygulamalı öğrenmenin için başka

:

protected function _initIniDump() 
{ 
    $ini = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development'); 
    Zend_Debug::dump($ini->toArray(), 'APPLICATION.INI');die(); 
} 
o dökümü Eğer o en iyi şekilde yükler Zend kaynakları dizisi, tanıdığı şey üzerinde yineleme göreceksiniz yılında

bilgi

yardımcı

:)

Umut bu.

6

application.ini

resources.layout[] = 

hat eşdeğerdir:

_initLayout() {} 

bunların her ikisi de, yeni bir nesne başlatılıyor

Bootstrap.php içinde ve bu nesne bir bootstrap parametre olarak ayarlanır, Bazı uygulama kaynakları için bir kapsayıcıdır (_init yöntemleriyle döndürülen değerler).

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

_initOtherResource() { 
    // .. 
} 

Yani kaynakların nesnelleştirilme sırasıdır:

kullanmakta, siparişi zorlamak, bu nedenle tek kaynak akımı birinden önce başlatılır sağlamak için, tek tek var yürütür

  1. otherResource
  2. someResource

Şimdi, ayrıca kullanabilirsiniz:

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

Not, her biri önce birbirlerini yürütmek çalıştığınızda, Circular Dependency hatayla karşılaşabilirsiniz söyledi.

Gereksinim duyduğunuz sayıda _init yöntemini kullanabilirsiniz, ancak bunları yeniden kullanılabilir hale getirmek için, bunları Zend_Application_Resource_Abstract sınıfını uygulayarak kendi sınıflarına ayırabilirsiniz.

Zend/Application/Resource dizininde bulabileceğiniz uygulama kaynaklarından bazı vardır. Bu kaynaklar, sen .: yani, application.ini gelen refering olan

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 

artık daha net Umarım vardır.