Zend Framework Düzeni

3 Cevap php

Ben Zend Framework ile başlıyorum ve ben Bootstrap dosyasını anlamak istiyorum. Tüm _init varsayılan yöntemlerdir tarafından yürütülür öğrendim ama benim için kafa karıştırıcı gibi görünüyor. Neyse ben sormak istiyorum ne değildir.

A $this->bootstrap('layout'); eylem etrafında geldi ve ben bu anlamak emin değilim. Bu application.ini dosyadaki resource.layout değişken mi? Gerçekten derin önyükleme süreci anlamak istiyorum.

I'm asking you for step by step explanation. Thanks in advance!

Yani bu benim önyükleme dosyası:

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');
    }
}

3 Cevap

application.ini adlı çizgi

resources.layout[] = 

eşdeğerdir:

_initLayout() {}

in Bootstrap.php

Her ikisi de yeni bir nesne başlatılıyor ve bu nesne (_init yöntemleri tarafından döndürülen değerler) bazı uygulama kaynakları için kapsayıcı bir bootstrap param olarak ayarlanır.

Böylece bir kaynak geçerli bir önce başlatıldı sağlamak için, tek tek orada idam edilir kullanarak, sipariş zorlamak:

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

_initOtherResource() {
    // .. 
}

Yani kaynakların başlatmasını sırası:

  1. otherResource
  2. someResource

Şimdi de kullanabilirsiniz:

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

Her biri önce birbirlerine yürütmek çalıştığınızda, Circular Dependency hata karşılaşabilirsiniz olduğunu unutmayın.

Eğer ihtiyacınız olan birçok _init yöntemleri kullanabilirsiniz, ancak bunları yeniden yapmak için, size Zend_Application_Resource_Abstract class uygulama, kendi sınıfında onları ayrı olabilir.

Eğer Zend/Application/Resource dizininde bulabilirsiniz bazı out of the box uygulama kaynakları vardır. Bu kaynaklar, sen application.ini, yani gelen bağlıyordum edilir:

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

Şimdi daha açık umuyoruz.

Mevcut seçenekler için bu documentation bakın.

Zend_Application otomatik kaynaklarıyla başlar application.ini şey önyükleyemez olacaktır.

Eğer ini dosyasındaki bir şey koymayın, eğer yüklü olmayacaktır unutmayın. Örneğin Varsayılan olarak hiçbir düzen yüklenir. : Eğer düzeni aşağıdaki uygulama için etkin olacak ikisinden biri veya her ikisi, eklerseniz

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

Hiçbiri ini ayarlanır, çünkü varsayılan önyükleme mevcut bir görünüm kaynak olmaz: gerçekleştirmek için en önemli bana anlatalım, değerlerini ihmal var varsayılan yük olacaktır. Ama ini bu koyarsanız:

resources.view[] =

o zaman arayabilirsiniz:

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

Sonra önyükleme, örneğin sizin app görünümü ile bir şeyler yapabilir

$view->doctype("HTML5");

Ayrıca, _initAutoload artık gerekli değildir, ve ile ikame edilmiş olabilir

appnamespace = ""

. ini de. Ben önyükleme ve ini seçenekleri çok kötü belgelenmiştir hemfikir.

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

Başka öğrenme eller için:

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

Bu çöplükte Zend, kaynaklar dizinin üzerinde tanıdığı şey yineleme göreceksiniz, o bilgi var ve en iyi şekilde yükler

:)

Umut olur.

Ben öğrendim ki: $ this-> boostrap ('kaynak') çağırarak; 'kaynak' application / yapılandırmaları / application.ini dosyasında değilse çalışmaz. Yani soruya benim cevabım 'evet', aşağıdaki ile application.ini dosyasında düzen kaynak tanımlamak zorunda olacaktır: (. Veya başka dir) resources.layout.layoutPath = APPLICATION_PATH "/ düzenleri / komut"

Ne yazık ki Zend Framework belgelerine bence gerçekten kötü. Özellikle bu konuda.

Benim düşüncem derin Zend Framework (Eğer zamanınız varsa veya Zend Kütüphane Sınıflar kaynak kodunu kontrol edebilirsiniz) detayları ve işleyişini içine almak istiyorsanız daha iyi bir dokümantasyon ile bir sürümü beklemek gerektiğidir.