Zend_Layout possède quelques options. Vous pouvez les spécifier
grâce à des accesseurs. Autrement, en passant un tableau ou un objet
Zend_Config au constructeur, ou à startMvc(). Un tableau
d'options peut aussi être passé à setOptions(), un objet
Zend_Config peut être passé à setConfig(). Les options
de configuration sont les suivantes :
-
layout : le nom du script de layout. L'inflecteur traduit alors ceci en nom de fichier. Par défaut, il s'agit de "layout" traduit vers "layout.phtml". Les accesseurs sont
setLayout()etgetLayout(). -
layoutPath : l'url de base vers les scripts de layout. Les accesseurs sont
setLayoutPath()etgetLayoutPath(). -
contentKey : la variable de layout utilisée pour accéder au contenu par défaut (lorsqu'utilisée couplée avec MVC). La valeur par défaut est "content". Pour les accesseurs :
setContentKey()etgetContentKey(). -
mvcSuccessfulActionOnly : si une action envoie une exception et que cette option vaut
TRUE, alors le layout ne sera pas rendu. (Ceci évite un double rendu alors que le plugin ErrorHandler est activé). Par défaut cette option est àTRUE. Ses accesseurs :setMvcSuccessfulActionOnly()etgetMvcSuccessfulActionOnly(). -
view : l'objet de vue (
Zend_View) utilisée par le layout pour rendre son script. Utilisé avec MVC,Zend_Layoutcherchera à récupérer la vue via l'aide ViewRenderer, si aucun objet de vue ne lui est passé explicitement. Les accesseurs sontsetView()etgetView(). -
helperClass : la classe représentant l'aide d'action lorsque
Zend_Layoutest utilisé avec les composants MVC. Par défaut il s'agit deZend_Layout_Controller_Action_Helper_Layout. Les accesseurs sontsetHelperClass()etgetHelperClass(). -
pluginClass : la classe représentant le plugin de contrôleur frontal lorsque
Zend_Layoutest utilisé avec les composants MVC. Par défaut, il s'agit deZend_Layout_Controller_Plugin_Layout. Les accesseurs sontsetPluginClass()etgetPluginClass(). -
inflector : l'inflecteur utilisé pour la résolution des noms de layout vers les scripts de layout. Voyez la documentation spécifique pour plus de détails. Les accesseurs sont
setInflector()etgetInflector().
Vous devez passer les helperClass et pluginClass à startMvc()
Pour que les paramètres helperClass et pluginClass
agissent, vous devez les passer en options à startMvc(). Si vous les
spécifiez après, ils seront ignorés.
Les exemples sont basés sur les paramètres $options et
$config suivants :
$options = array(
'layout' => 'foo',
'layoutPath' => '/chemin/vers/layouts',
'contentKey' => 'CONTENT'
// ignorés si MVC n'est pas utilisé
);
/**
[layout]
layout = "foo"
layoutPath = "/chemin/vers/layouts"
contentKey = "CONTENT"
*/
$config = new Zend_Config_Ini('/chemin/vers/layout.ini', 'layout');
Exemple 486. Passer des options au constructeur ou à startMvc()
Le constructeur et la méthode statique startMvc() acceptent soit
un tableau d'options, soit un objet Zend_Config.
Voyons le cas du tableau :
// Avec le constructeur : $layout = new Zend_Layout($options); // Avec startMvc(): $layout = Zend_Layout::startMvc($options);
Et maintenant avec l'objet de configuration :
$config = new Zend_Config_Ini('/chemin/vers/layout.ini', 'layout');
// Cas du constructeur:
$layout = new Zend_Layout($config);
// Via startMvc():
$layout = Zend_Layout::startMvc($config);
C'est la manière la plus simple de configurer votre objet
Zend_Layout.
Exemple 487. Utilisation de setOptions() et setConfig()
Pour configurer Zend_Layout après l'avoir instanciée,
utilisez les méthodes setOptions() et setConfig() sur
l'objet :
// Utilisation d'un tableau d'options: $layout->setOptions($options); // Utilisation d'un objet Zend_Config: $layout->setConfig($options);
Notez cependant que certaines options comme pluginClass et
helperClass n'auront aucun effet avec ses méthodes. Elles doivent être
passées au constructeur ou à la méthode startMvc().
Exemple 488. Utilisation des accesseurs
Enfin, vous pouvez aussi configurer votre objet de
Zend_Layout grâce à ses accesseurs. Ils peuvent s'utiliser
chaînés (interface fluide):
$layout->setLayout('foo')
->setLayoutPath('/chemin/vers/layouts')
->setContentKey('CONTENT');