IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MVC PHP Discussion :

Zend_View_Helper_BaseUrl retourne un string(0)


Sujet :

MVC PHP

  1. #1
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut Zend_View_Helper_BaseUrl retourne un string(0)
    Bonjour,

    Je suis actuellement en développement d'une application en Z.F1.7. J'ai repris des points de mon Z.F.1.5. Mais une chose ne fonctionne pas. Il s'agit de l'aide de vue baseUrl Je ne sais pas pourquoi elle me retourne toujours une chaîne vide, quelque soit le répertoire où je sois. Forcément, pour les images c'est "génant"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    class Zend_View_Helper_BaseUrl
    {
        function baseUrl()
        {
            $fc = Zend_Controller_Front::getInstance();
            return $fc->getBaseUrl();
        }}
    Je cherche depuis une heure, mais pas moyen de trouver le soucis. J'ai analysé le code dans la méthode $fc->getBaseUrl() Et j'ai extrait le request. Chose étonnante, voici son contenu :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ["_requestUri:protected"]=>
      string(6) "/home/"
      ["_baseUrl:protected"]=>
      string(0) ""
      ["_basePath:protected"]=>
      NULL
    Je sèche, je ne comprends pas cela marchait très bien avec ZF1.5 dans mon précédent projet !
    Sinon je communique mon Initializer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    <?php
    /**
     * My new Zend Framework project
     * 
     * @author  
     * @version 
     */
     
    require_once 'Zend/Controller/Plugin/Abstract.php';
    require_once 'Zend/Controller/Front.php';
    require_once 'Zend/Controller/Request/Abstract.php';
    require_once 'Zend/Controller/Action/HelperBroker.php';
    require_once "Zend/Loader.php";
     
    /**
     * 
     * Initializes configuration depndeing on the type of environment 
     * (test, development, production, etc.)
     *  
     * This can be used to configure environment variables, databases, 
     * layouts, routers, helpers and more
     *   
     */
    class Initializer extends Zend_Controller_Plugin_Abstract {
        const CONFIGURATION = 'configuration';
        const ENVIRONNEMENT_TEST = 'test';
        const ENVIRONNEMENT_PRODUCTION = 'production';
        const ENVIRONNEMENT_QUALIFICATION = 'qualification';
        const ENVIRONNEMENT_DEVELOPPEMENT = 'development';
        /**
         * @var Zend_Config
         */
        protected static $_config;
     
        /**
         * @var string Current environment
         */
        protected $_env;
     
        /**
         * @var Zend_Controller_Front
         */
        protected $_front;
     
        /**
         * @var string Path to application root
         */
        protected $_root;
     
        /**
         * Constructor
         *
         * Initialize environment, root path, and configuration.
         * 
         * @param  string $env 
         * @param  string|null $root 
         * @return void
         */
        public function __construct($env, $root = null) {
            $this->_setEnv ( $env );
            if (null === $root) {
                $root = realpath ( dirname ( __FILE__ ) . '/../' );
            }
            $this->_root = $root;
     
            $this->initPhpConfig ();
     
            $this->_front = Zend_Controller_Front::getInstance ();
     
            // set the test environment parameters
            if ($env == self::ENVIRONNEMENT_TEST || $env == self::ENVIRONNEMENT_DEVELOPPEMENT) {
                // Enable all errors so we'll know when something goes wrong. 
                error_reporting ( E_ALL | E_STRICT );
                ini_set ( 'display_startup_errors', 1 );
                ini_set ( 'display_errors', 1 );
     
                $this->_front->throwExceptions ( true );
            }
     
            // Set up autoload.
            Zend_Loader::registerAutoload ();
        }
     
        /**
         * Initialize environment
         * 
         * @param  string $env 
         * @return void
         */
        protected function _setEnv($env) {
            $this->_env = $env;
        }
     
        /**
         * Initialize Data bases
         * 
         * @return void
         */
        public function initPhpConfig() {
     
        }
     
        /**
         * Initialize Locale and Translation
         * 
         * @return void
         */
        public function initLocale() {
            //Langue par défaut chargé dans le fichier de configuration
            try {
                $localeValue = 'en';
                $locale = new Zend_Locale ( $localeValue );
                Zend_Registry::set ( 'Zend_Locale', $locale );
     
                $translationFile = $this->_root . DIRECTORY_SEPARATOR . 'lang' . DIRECTORY_SEPARATOR . $localeValue . '.inc.php';
     
                $translate = new Zend_Translate ( 'array', $translationFile, $localeValue );
                Zend_Registry::set ( 'Zend_Translate', $translate );
                Zend_Form::setDefaultTranslator($translate);
            } catch ( Zend_Translate_Exception $e ) {
                $this->_exceptionFatale ( 'Erreur lors du chargement de la traduction', $e );
            }
        }
     
        /**
         * Route startup
         * 
         * @return void
         */
        public function routeStartup(Zend_Controller_Request_Abstract $request) {
            $this->_loadConfiguration ();
            parent::routeStartup ( $request );
            $this->initDb ();
            $this->initHelpers ();
            $this->initView ();
            $this->initPlugins ();
            $this->initRoutes ();
            $this->initControllers ();
            $this->initLocale ();
        }
     
        /**
         * Initialize data bases
         * 
         * @return void
         */
        public function initDb() {
            // chargement de la configuration
            try {
                //Chargement du fichier de configuration
                $configuration = Zend_Registry::get ( self::CONFIGURATION );
                // Mise en place de la BDD
                $db = Zend_Db::factory ( $configuration->db );
                // Mise en place de l'adaptateur par défaut            
                Zend_Db_Table::setDefaultAdapter ( $db );
            } catch ( Zend_Db_Exception $e ) {
                $this->_exceptionFatale ( 'Erreur dans la configuration de la base de données', $e );
            }
        }
     
        /**
         * Initialize action helpers
         * 
         * @return void
         */
        public function initHelpers() {
            // register the default action helpers
            Zend_Controller_Action_HelperBroker::addPath ( '../application/default/helpers', 'Zend_Controller_Action_Helper' );
        }
     
        /**
         * Initialize view 
         * 
         * @return void
         */
        public function initView() {
            // Bootstrap layouts
            $layout = Zend_Layout::startMvc ( array ('layoutPath' => $this->_root . '/application/default/layouts', 'layout' => 'main' ) );
            //Utilisation du filtre dans la vue
            $view = $layout->getView();
            $view->addFilterPath ( 'Vdi/View/Filter', 'Vdi_View_Filter' );
            $view->setFilter ( 'Translate' );
        }
     
        /**
         * Initialize plugins 
         * 
         * @return void
         */
        public function initPlugins() {
            //Ajout du plugin de connexion
            $this->_front->registerPlugin ( new Vdi_Plugin_Auth ( new Vdi_Acl ( ) ) );
        }
     
        /**
         * Initialize routes
         * 
         * @return void
         */
        public function initRoutes() {
     
        }
     
        /**
         * Initialize Controller paths 
         * 
         * @return void
         */
        public function initControllers() {
            $this->_front->addControllerDirectory ( $this->_root . '/application/default/controllers', 'default' );
            $this->_front->setDefaultControllerName ( 'home' );
        }
        /**
         * Fonction de chargement de la configuration
         *
         *  @return void
         */
        private function _loadConfiguration() {
            try {
                //Chargement de la configuration
                $configuration = new Zend_Config_Ini ( $this->_root . '/application/configuration.ini', 'general' );
                //Chargement de la configuration dans le registre
                Zend_Registry::set ( self::CONFIGURATION, $configuration );
            } catch ( Zend_Config_Exception $e ) {
                $this->_exceptionFatale ( 'Erreur dans le fichier de configuration', $e );
            }
        }
        private function _exceptionFatale($message, Zend_Exception $e) {
            if ($this->_env == self::ENVIRONNEMENT_DEVELOPPEMENT) {
                echo $message . "\n<br/>";
                throw $e;
            } else {
                die ( 'Erreur fatale :' . $message );
            }
        }
     
    }
    ?>
    Une idée sur la raison de ce retour de chaîne toujours vide ?
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  2. #2
    Membre Expert
    Avatar de aityahia
    Homme Profil pro
    CIEPTAL CARS SPA
    Inscrit en
    Mars 2006
    Messages
    1 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Algérie

    Informations professionnelles :
    Activité : CIEPTAL CARS SPA
    Secteur : Transports

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 938
    Par défaut
    Bonjour,


    essaie d'initialiser la baseUrl dans ton bootstrap en ajoutant cette ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     $this->_front->setBaseUrl($root);
    lu ici: La détection d'URL est sensible à la casse

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    public function __construct($env, $root = null) {
            $this->_setEnv ( $env );
            if (null === $root) {
                $root = realpath ( dirname ( __FILE__ ) . '/../' );
            }
            $this->_root = $root;
     
            $this->initPhpConfig ();
     
            $this->_front = Zend_Controller_Front::getInstance ();
     
             $this->_front->setBaseUrl($root); // ligne ajouter
     
            // set the test environment parameters
            if ($env == self::ENVIRONNEMENT_TEST || $env == self::ENVIRONNEMENT_DEVELOPPEMENT) {
                // Enable all errors so we'll know when something goes wrong. 
                error_reporting ( E_ALL | E_STRICT );
                ini_set ( 'display_startup_errors', 1 );
                ini_set ( 'display_errors', 1 );
     
                $this->_front->throwExceptions ( true );
            }
     
            // Set up autoload.
            Zend_Loader::registerAutoload ();
        }
    tiens moi au courant .

  3. #3
    Membre Expert
    Avatar de Alexandre T
    Homme Profil pro
    Chef de projets AMO
    Inscrit en
    Mai 2002
    Messages
    1 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets AMO
    Secteur : Transports

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Par défaut
    Bonjour,

    Ta méthode est une bonne piste, elle initialise bien la variable. Seulement, elle l'initialise avec de mauvaises valeurs.

    $root contient /home/alexandre/Zend/etc...

    C'est quand même étonnant que Zend n'initialise pas baseUrl. Je dois l'effacer quelque part ou oublier d'appeler quelque chose ! Franchement ça m'ennuie de le calculer. Je peux le faire car avec $_SERVER['REQUEST_URI'], je peux savoir dans quel répertoire je suis, mais je trouve cela vraiment bizarre pour ma part.

    Je vais regarder dans le code source de Zend la fonction qui appelle setBaseUrl où qui affecte cette variable.

    Si quelqu'un à une autre piste...
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

Discussions similaires

  1. l'entête de la méthode qui retourne un String
    Par Fred44210 dans le forum C++/CLI
    Réponses: 31
    Dernier message: 18/02/2010, 15h59
  2. Comment retourner le string d'un passwordfield?
    Par aurelie689 dans le forum Débuter
    Réponses: 2
    Dernier message: 02/05/2009, 12h56
  3. Réponses: 11
    Dernier message: 21/03/2008, 12h24
  4. Réponses: 9
    Dernier message: 10/05/2007, 17h57
  5. [Servlet] Retourne une String illisible
    Par suRem dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 30/12/2006, 02h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo