2009-07-02 30 views
13

Estoy comenzando con Zend Framework y me gustaría entender el archivo Bootstrap. Aprendí que todos los métodos _init se ejecutan de manera predeterminada, pero me parece confuso. De todos modos, eso no es lo que me gustaría preguntar.Zend Framework Layout

A se produjo la acción $this->bootstrap('layout'); y no estoy seguro si entiendo esto. ¿Es esta la variable resource.layout en el archivo application.ini? Me gustaría entender realmente el proceso de arranque en profundidad.

Te estoy pidiendo una explicación paso a paso. ¡Gracias de antemano!

Así que este es mi archivo de arranque:

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

Acabo de vincular a esta pregunta en mi cuenta de Twitter https://twitter.com/joedevon/status/2464729062, con suerte alguien aparecerá brevemente con una buena explicación detallada. Lo tengo totalmente funcionando, pero no entiendo totalmente todo lo que está haciendo :) – joedevon

+0

$ this-> bootstrap ('layout'); Esta línea garantiza que el 'diseño' se haya configurado antes de que se ejecute el resto de _initViewHelpers(). – berty

Respuesta

1

He descubierto que: llamando a $ this-> boostrap ('recurso'); no funcionará si 'resource' no está en el archivo application/configs/application.ini. Así que mi respuesta a su pregunta sería 'sí', debe definir el recurso de disposición en el archivo application.ini con lo siguiente: resources.layout.layoutPath = APPLICATION_PATH "/ layouts/scripts" (u otro directorio)

Desafortunadamente, la documentación de Zend Framework es realmente mala en mi opinión. Especialmente en este tema.

Mi opinión es que debe esperar una versión con mejor documentación si desea profundizar en los detalles y el funcionamiento de Zend Framework (o puede consultar el código fuente de las clases de la biblioteca Zend si tiene la hora).

+2

Sí, en este caso es el manual de ZF un montón de basura y no hay ejemplos. Muy mal. Espero que haya algunos tutoriales pronto/o mejor manual. –

+2

El manual de ZF es un poco cojo a veces y algo así como un wiki/tutorial. Sin embargo, si sigues leyendo y sigues programando cosas con ZF, eventualmente comprenderás todas las partes con las que trabajas, al menos así fue para mí. Los documentos cubren la mayoría de las cosas, pero están dispersas aquí y allá. Por lo tanto, requiere mucha exposición y manipulación para obtener una comprensión más profunda de lo que está sucediendo. ¡Buena suerte! –

2

consulte este documentation para conocer las opciones disponibles.

Zend_Application automáticamente iniciará cualquier cosa en la aplicación.ini que comienza con los recursos.

Tenga en cuenta que si no coloca algo en su archivo ini, no se cargará. P.ej. por defecto, no se carga ningún diseño. Si se incluye cualquiera de los dos, o ambos, de la que sigue el trazado será habilitado para la aplicación:

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

Lo más importante es darse cuenta de que va a cargar los valores por defecto donde se han omitido los valores, me explico: Por Por defecto, el bootstrap no tendrá un recurso de vista disponible, porque ninguno está establecido en el ini. Pero si se pone esto en el ini:

resources.view[] = 

entonces usted puede llamar:

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

A continuación, se puede hacer algo con la opinión de su aplicación desde el arranque, por ejemplo,

$view->doctype("HTML5"); 

Además, su _initAutoload ya no es necesario y puede ser reemplazado con

appnamespace = "" 

en los ini. Estoy de acuerdo con que las opciones bootstrapping y ini están muy mal documentadas.

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

más para aprendizaje práctico:

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

En ese volcado verá que Zend iterar sobre el conjunto de recursos, cualquier cosa que reconoce, se carga a lo mejor de todo el mundo sabe

:)

Espero que ayude.

6

La línea desde application.ini

resources.layout[] = 

es equivalente a:

_initLayout() {} 

en Bootstrap.php

Ambos están inicializando nuevo objeto, y este objeto se establece como un parámetro bootstrap, que es un contenedor para algunos recursos de aplicaciones (valores devueltos por los métodos _init).

No son ejecutados uno por uno, de modo de garantizar un recurso se inicia antes de que el del actual, a la fuerza el orden, usando:

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

_initOtherResource() { 
    // .. 
} 

Así el orden de creación de instancias de los recursos es:

  1. otherResource
  2. someResource

Ahora, también se pueden utilizar:

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

Nota, que puede encontrar Circular Dependency de error cuando intenta ejecutar uno al otro antes de cada uno.

Puede usar tantos métodos _init que necesite, pero para que sean reutilizables, puede separarlos en su propia clase, implementando la clase Zend_Application_Resource_Abstract.

Hay fuera de la caja recursos de la aplicación, que puede encontrar en el directorio Zend/Application/Resource. Estos son los recursos, usted se refiere a application.ini, es decir .:

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 

espero que sea más claro ahora.