Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 04-05-2009 19:03:12

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

[ZF 1.8.0]Modules et paramètres

Une question : si j'ai bien compris, j'ai un bootstrap.php par module, non ?

Dans ce cas il y a des directives que je dois mettre dans les deux, oui ?
Et pareil pour application.ini

Je trouve ça louche...

Je pense être passé à coté de quelque chose là.

Hors ligne

 

#2 05-05-2009 07:58:49

lucien
Nouveau membre
Date d'inscription: 21-04-2009
Messages: 3

Re: [ZF 1.8.0]Modules et paramètres

à par le module 'default' on a bien un bootstrap par module avec comme structure de base:

Code:

class <Modulename>_Bootstrap extends Zend_Application_Module_Bootstrap {}

dans ce cas tu hérites de toutes les directives de ton /application/Bootstrap.php, mais tu peux les réécrire si tu veux dans /application/modulename/Bootstrap.php

Dernière modification par lucien (05-05-2009 10:25:16)

Hors ligne

 

#3 05-05-2009 08:12:29

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [ZF 1.8.0]Modules et paramètres

Pourquoi le module Default n'a pas de Bootstrap...
Dans cette structure si je vire le bootstrap de default, ben ça ne marche plus, non ? :

Code:

application
    admin
        config
        controllers
        forms
        helpers
        layouts
        models
        views
        bootstrap.php
    ventes
        config
        controllers
        forms
        helpers
        layouts
        models
        views
        bootstrap.php
    default
        config
        controllers
        forms
        helpers
        layouts
        models
        views
        bootstrap.php
public
    .htaccess
    index.php
scripts
tests

Si je te suis j'aurais au moins un bootstrap dans mon module ventes et admin, j'aurais donc les directives suivantes dans les deux ? :

Code:

 public function initRoutes()
    {
        $router = $this->_front->getRouter();
        $router->addRoute(
            "communaute",
            new Zend_Controller_Router_Route(
                "/:communaute/:module/:controller/:action/*",
                array(
                    "communaute"     => "general",
                    "module"        => "default",
                    "controller"    => "index",
                    "action"        => "index"
                )
            )
        );
        
    }
    public function initControllers()
    {
        $this->_front->addControllerDirectory($this->_root . '/application/default/controllers', 'default');
        $this->_front->addControllerDirectory($this->_root . '/application/admin/controllers', 'admin');
        $this->_front->addControllerDirectory($this->_root . '/application/admin/controllers', 'ventes');
    }

Comment éviter cette redondance ?

Hors ligne

 

#4 05-05-2009 08:21:59

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ZF 1.8.0]Modules et paramètres

Ceci est TA structure, mais je crois que la norme prévue par le ZF est un peu différente :
Ton module par défaut est la répertoires parents de tes modules.
En gros, le répertoire 'application' EST un module, sauf qu'il peut contenir un répertoire 'modules' avec X modules


----
Gruiiik !

Hors ligne

 

#5 05-05-2009 08:57:34

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [ZF 1.8.0]Modules et paramètres

Disons que j'ai tiré cette structure des exemples donnés sur le site Zend et Developpez, et jusque là j'étais satisfait de cette compartimentation des modules...
Il semble en effet que la tendance ne soit plus celle là.

Donc si j'ai une structure comme celle que tu indiques :

Code:

application
    admin
        config
        controllers
        forms
        helpers
        layouts
        models
        views
        bootstrap.php
    ventes
        config
        controllers
        forms
        helpers
        layouts
        models
        views
        bootstrap.php

    config
    controllers
    forms
    helpers
    layouts
    models
    views
    bootstrap.php
public
    .htaccess
    index.php
scripts
tests

Cela signifie t-il que je peux me passer des deux bootstrap qui sont sous les modules admin et ventes ?
Et que je peux virer la ligne

Code:

$this->_front->addControllerDirectory($this->_root . '/application/default/controllers', 'default');

de initControllers ?

Et pour les fichiers config.ini, même chose, ils peuvent aussi être supprimés des modules admin et ventes ?
Sauf si bien entendu on a des particularités à ce niveau. Sauf que la doc officielle me laisse songeur sur l'utilisation des fichiers ini et leur possible remplacement par du php.

J'avoue ne pas avoir une vision aussi claire qu'avant avec cette nouvelle version, je ne doute pas que tu vas me dire que le problème vient de moi, mais pour avoir lu d'autre forums, http://www.nabble.com/Zend-Framework-Co … 16154.html par exemple, j'ai vu que je n'étais pas le seul mal comprenant...

Quoiqu'il en soit, merci pour tes conseils.

J'ai trouvé ce lien : http://konductasoluciones.blogspot.com/ … dules.html
c'est en espagnol, mais pour le code ce n'est pas un problème.

Dernière modification par Jean-Marc Rigade (05-05-2009 09:13:51)

Hors ligne

 

#6 05-05-2009 10:07:15

lucien
Nouveau membre
Date d'inscription: 21-04-2009
Messages: 3

Re: [ZF 1.8.0]Modules et paramètres

en plus de la structure décrite dans ton dernier lien, tu peux ajouter dans chaque dossier de module un dossier 'forms', 'plugins', 'services', etc.. , et si tu préfixe correctement tes classes, elles seront automatiquement reconnues.

pour avoir une listes des types de ressources par défaut, tu peux regarder la classe Zend_Application_Module_Autoloader.

tu peux, bien sûr, les modifier, en supprimer ou en ajouter, par exemple dans l'un de tes bootstrap:

Code:

protected function _initAutoload()
{
    $autoloader = new Zend_Application_Module_Autoloader(...);

    $autoloader->removeResourceType('dbtable');
    $autoloader->removeResourceType('service');

    $autoloader->addResourceType('table', 'models/tables', 'Model_Table');
}

sinon c'est toujours possible d'avoir des fichiers de config en php :

Code:

return array(
    'phpsettings' => array(
        'display_startup_errors' => 1,
        'display_errors' => 1,
        'error_reporting' => E_ALL
    ),

    'autoloadernamespaces' => array(
        '0' => 'Core_',
        '1' => 'Site_'
    ),

    'bootstrap' => array(
        'path' => APPLICATION_PATH.'/Bootstrap.php',
        'class' => 'Bootstrap'
    ),

    'resources' => array(
            'modules' => array('forum', 'admin'),

        'frontcontroller' => array(
                'moduledirectory' => APPLICATION_PATH.'/modules',
                'throwexceptions' => 'true',

                'params' => array(
                    //
                )
        ),

        'layout' => array(
            'layout' => 'layout',
            'layoutPath' => APPLICATION_PATH.'/layouts'
        ),
        
            'db' => array(
            'adapter' => 'pdo_mysql',
            'isdefaulttableadapter' => 'true',

            'params'  => array(
                'hostname' => 'localhost',
                'username' => 'user',
                'password'  => 'pass',
                'dbname'    => 'database',

                'profiler'    => array(
                        'enabled' => 'true',
                        'class'        => 'Zend_Db_Profiler_Firebug'
                    )
            )
        )
    )
);

Dernière modification par lucien (05-05-2009 10:17:45)

Hors ligne

 

#7 05-05-2009 11:18:39

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [ZF 1.8.0]Modules et paramètres

Ok !!!
Pas mal du tout, en effet...

Merci beaucoup pour tes lumières, sympa.

Hors ligne

 

#8 05-05-2009 19:33:45

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ZF 1.8.0]Modules et paramètres

Juste un détail, tus obligé d'avoir un bootstrap par module si tu veux que l'autoloader de ressources pour module soit chargé automatiquement par Zend_Application  (sans avoir à instancier Zend_Application_Module_Autoloader)
Biensur, en supposant que tu respectes la structure défini par ZF.


----
Gruiiik !

Hors ligne

 

#9 06-05-2009 09:12:42

Jean-Marc Rigade
Membre
Lieu: Rennes
Date d'inscription: 25-09-2007
Messages: 314

Re: [ZF 1.8.0]Modules et paramètres

Mon but n'est certainement pas de sortir de ce qui est défini par Zend au contraire.

Donc au final, le contenu minimum d'un bootstrap.php ?

Code:

require_once 'Zend/Loader/Autoloader.php';
$autoloader = Zend_Loader_Autoloader::getInstance();

Hors ligne

 

#10 12-05-2009 22:54:18

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [ZF 1.8.0]Modules et paramètres

Comment ca marche le bootstrap par module ?

Dans le dossier /modules/admin j'ai crée un fichier Bootstrap.php avec le code :

Code:

<?php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{
    protected function _initControllers()
    {
            .................
        }
}

et rien n'est initialisé pour le module admin. J'ai manqué une étape mais je vois pas ou .

Dernière modification par alien7 (12-05-2009 22:59:49)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#11 12-05-2009 23:27:10

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ZF 1.8.0]Modules et paramètres

dans ton .ini il faut mettre resources.modules[] = pour que la resource de module soit chargé et donc que tes bootstraps soient exécutés


----
Gruiiik !

Hors ligne

 

#12 13-05-2009 13:34:45

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [ZF 1.8.0]Modules et paramètres

Merci nORKy, ca marche maintenant. Mais j'ai un autre souci. Dans mon Bootstrap du module Admin, si je definit la method suivante :

Code:

<?php
class Admin_Bootstrap extends Zend_Application_Module_Bootstrap
{    
    protected function _initView()
    {
        exit('stop');
        $layout = Zend_Layout::getMvcInstance()->setLayout('admin');
    }
}

Maintenant si je rentre l'url du module default et bien le Bootstrap du module Admin est aussi execité ce qui provoque aussi un exit du code dans le module default.

Bizarre non ?

Ce que j'aimerais, c'est initalisé les controllers sans surchager Zend_Controller_Action, est ce possible avec Zend_Application ?

Merci

Dernière modification par alien7 (13-05-2009 14:12:20)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#13 13-05-2009 14:12:14

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ZF 1.8.0]Modules et paramètres

non, ce n'est pas bizarre.

Lorsque tu bootstrap ton application, tu ne connais pas encore la requête, donc, tu ne sais pas quel module/action/controller va être exécuté.

Donc, touts modules qui possèdent une classe bootstrap, son bootstrapé.
Ce que tu cherches à faire (changer le layout en fonction du module) doit être réalisé dans un plugin.

Le bootstrap de module permet surtout de séparer une logique de code, pas de modifier le comportement de l'application en fonction du module demandé


----
Gruiiik !

Hors ligne

 

#14 13-05-2009 14:14:36

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [ZF 1.8.0]Modules et paramètres

D'accord, merci pour l'explication.

Ce que j'aimerais, c'est initalisé les controllers sans dériver la class Zend_Controller_Action, est ce possible avec Zend_Application ?

Dernière modification par alien7 (13-05-2009 16:07:28)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#15 13-05-2009 14:52:22

nORKy
Membre
Date d'inscription: 06-03-2008
Messages: 1098

Re: [ZF 1.8.0]Modules et paramètres

Ca dépends ce de que tu apelles initialisés.

Il faut savoir qu'avec la bootstrap fourni avec le ZF (que tu dois surment étendre), tes controllers on comme invokeArgs ton bootstrap d'application.

Prenons un exemple (que j'utilise) :

Certains modules ont des paramètres spécifiques, par exemple des chemins de répertoires :

Code:

;application.ini

; je possède un module nommé 'superv'

resources.modules[] = 
superv.xmldirectory = "/usr/local/etc/superv/xml"

Je veux récupéré cette conf dans mon module (actuellement, j'ai pas trouvé mieux)

Code:

class Superv_DsensorController extends Zend_Controller_Action
{
  protected $_options = array();

  public function init()
  {
    $moduleBootstraps = $this->getInvokeArg('bootstrap')
      ->getPluginResource('modules')
      ->getExecutedBootstraps();
    $this->_options = $moduleBootstraps['superv']->getOptions();
}

Ton controller a accès à ses options dans $this->_options. (echo $this->_options['xmldirectory'])

On peut surement améliorer cela, mais c'est déjà un bon début

Dernière modification par nORKy (13-05-2009 14:52:48)


----
Gruiiik !

Hors ligne

 

#16 13-05-2009 15:10:34

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [ZF 1.8.0]Modules et paramètres

En fait pour l'instant je surcharge la method init() en héritant de la class Zend_Controller_Action, et dans tous mes controller je fais un parent::init();
J'aurai pensé qu'avec le Zend_Application cela soit simplifié

Dernière modification par alien7 (13-05-2009 16:06:35)


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#17 20-05-2009 12:41:08

Juch
Membre
Lieu: Paris 17e
Date d'inscription: 29-04-2009
Messages: 48

Re: [ZF 1.8.0]Modules et paramètres

pas besoin de faire parent::init();

Hors ligne

 

#18 20-05-2009 13:44:42

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [ZF 1.8.0]Modules et paramètres

Juch a écrit:

pas besoin de faire parent::init();

Explique toi parce que si j'enleve parent::init() ca ne marche pas.


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#19 20-05-2009 17:38:32

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [ZF 1.8.0]Modules et paramètres

Hello,

Il dit cela car la méthode init() de Z_C_A est vide donc il n'est pas nécessaire de l'appeler.

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#20 20-05-2009 21:22:13

alien7
Membre
Date d'inscription: 29-04-2007
Messages: 447

Re: [ZF 1.8.0]Modules et paramètres

Ok je mets mon code alors :

Code:

class Model_Class_Action extends Zend_Controller_Action
{
    public function init()
    {
        ............
    }
}

Tous mes controller dérive de cette class ci-dessus:

Code:

class IndexController extends Model_Class_Action
{
    public function init()
    {
        parent::init();
        // suite de l'init
    }
}

Voilà comment je fais, je sais pas si c'est propre mais en tous cas ca marche. Là on est d'accord il faut bien parent::init().

Autre chose, je vois pas ou renger cette class, je la renge pour l'instant dans le dossier Model_Class, est ce correct ?
Merci


ZF 2.3 - Twitter Bootstrap 3.2
Local: Ubuntu  -> Apache2 2.4 - MariaDB 10 - PHP 5.6

Hors ligne

 

#21 21-05-2009 10:40:12

mikaelkael
Administrateur
Lieu: Donges
Date d'inscription: 18-06-2007
Messages: 1176
Site web

Re: [ZF 1.8.0]Modules et paramètres

Hello,

OK dans ce cas pour le parent::init() wink

Pour le rangement, je mets dans le dossier /library : dans 'Model/Class/Action.php'

A+


Less code = less bugs
Contributeur ZF - ZCE - ZFCE - Doc ZF (CHM & PDF) - Vice-trésorier AFUP 2011
Ubuntu 11.04 - ZendServer

Hors ligne

 

#22 31-08-2009 14:31:21

booradley
Membre
Date d'inscription: 10-01-2009
Messages: 163

Re: [ZF 1.8.0]Modules et paramètres

Jean-Marc Rigade a écrit:

Pourquoi le module Default n'a pas de Bootstrap...
Dans cette structure si je vire le bootstrap de default, ben ça ne marche plus, non ? :

Code:

application
    admin
        config
        controllers
        forms
        helpers
        layouts
        models
        views
        bootstrap.php
    ventes
        config
        controllers
        forms
        helpers
        layouts
        models
        views
        bootstrap.php
    default
        config
        controllers
        forms
        helpers
        layouts
        models
        views
        bootstrap.php
public
    .htaccess
    index.php
scripts
tests

Si je te suis j'aurais au moins un bootstrap dans mon module ventes et admin, j'aurais donc les directives suivantes dans les deux ? :

Code:

 public function initRoutes()
    {
        $router = $this->_front->getRouter();
        $router->addRoute(
            "communaute",
            new Zend_Controller_Router_Route(
                "/:communaute/:module/:controller/:action/*",
                array(
                    "communaute"     => "general",
                    "module"        => "default",
                    "controller"    => "index",
                    "action"        => "index"
                )
            )
        );
        
    }
    public function initControllers()
    {
        $this->_front->addControllerDirectory($this->_root . '/application/default/controllers', 'default');
        $this->_front->addControllerDirectory($this->_root . '/application/admin/controllers', 'admin');
        $this->_front->addControllerDirectory($this->_root . '/application/admin/controllers', 'ventes');
    }

Comment éviter cette redondance ?

Juste une remarque toute bete mais qui peut faire gagner du temps:
Ca fonctionnait en local mais pas sur mon serveur Linux.
C'est comme ca que je me suis apercu (en regardant les sources Zend) que le fichier bootstrap doit s'appeler "Bootstrap.php" et non "bootstrap.php".

Hors ligne

 

Pied de page des forums

Propulsé par PunBB
© Copyright 2002–2005 Rickard Andersson
Traduction par punbb.fr

Graphisme réalisé par l'agence Rodolphe Eveilleau
Développement par Kitpages