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 :

MVC > BaseController > headTitle headStyle etc..


Sujet :

MVC PHP

  1. #1
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 29
    Points
    29
    Par défaut MVC > BaseController > headTitle headStyle etc..
    Hello,

    je suis débutant sous Zend et je veux faire cette configuration là :
    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
     
    // IndexController.php
    	class IndexController extends BaseController {
     
    		public function indexAction() {
    			$this->render();
    		}
    	}
     
    // BaseController.php
    	class BaseController extends Zend_Controller_Action {
     
    		public function init() {
    			$request = Zend_Controller_Front::getInstance()->getRequest();
    			$this->view->headTitle($request->getActionName())
    				  ->headTitle($request->getControllerName());
    			$this->view->headTitle('Epoxia-Oragis Admin');
    			$this->view->headTitle()->setSeparator(' | ');
    		}
    	}
    Seulement il me dit :
    Warning: Zend_Loader::include_once(BaseController.php) [zend-loader.include-once]: failed to open stream: No such file or directory in /home/citronbleu-v/www-dev/private/epoxia/admin/library/Zend/Loader.php on line 83

    Warning: Zend_Loader::include_once() [function.include]: Failed opening 'BaseController.php' for inclusion (include_path='../library') in /home/citronbleu-v/www-dev/private/epoxia/admin/library/Zend/Loader.php on line 83

    Fatal error: Class 'BaseController' not found in /home/citronbleu-v/www-dev/private/epoxia/admin/application/controllers/IndexController.php on line 2
    Comment faire un extends si mon autoload charge les fichiers du dossier de la library et non ceux du dossier Controller ?

  2. #2
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Bonjour,

    Il faudrait que ton BaseController.php se trouve dans un répertoire ciblé par l'include_path de PHP.

    Par exemple, tu peux créer un répertoire 'MyApp' dans library, et y placer ce fichier, en renommant la classe MyApp_BaseController.

  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 : 47
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Normalement ta classe BaseController doit se trouver dans un fichier appelé Controller.php situé dans le répertoire suivant :

    /home/citronbleu-v/www-dev/private/epoxia/admin/library/Base/
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  4. #4
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Citation Envoyé par Alexandre T Voir le message
    Normalement ta classe BaseController doit se trouver dans un fichier appelé Controller.php situé dans le répertoire suivant :

    /home/citronbleu-v/www-dev/private/epoxia/admin/library/Base/
    Dans ce cas, ça serait la classe Base_Controller, non ?

  5. #5
    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 : 47
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 213
    Points : 3 001
    Points
    3 001
    Par défaut
    Arf autant pour moi j'ai lu Base_Controller en effet... Bon je vais prendre un café, plutôt que de donner de mauvaises pistes !
    Alexandre Tranchant
    Chef de projet AMO pour le Cerema.
    Retrouvez mes articles sur PHP et Symfony

  6. #6
    Nouveau membre du Club
    Inscrit en
    Mars 2008
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 27
    Points : 29
    Points
    29
    Par défaut
    merci bien, je ne pensais pas qu'il fallait toucher à la library.

    C'est peut être mieux que je fasse dans une méthode init() une instance statique d'une classe qui initialise tout ce dont je veux, comme ça je l'aurai dans le dossier application/controller ? .

    Vous faites comment vous pour utiliser des Helpers comme headTitle ? vous les insérés directement dans les fichiers templates (.phtml) ?

    je manque d'organisation dans mes codes, je ne sais pas trop bien utiliser le MVC encore et j'ai un manque de notion en POO. Je pensais au départ créer un helper dans le dossier application/views/helpers pour mon template layout de cette façon :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    	class Zend_View_Helper_Title {
     
    		public function title() {
    			$request = Zend_Controller_Front::getInstance()->getRequest();
    			$this->view->headTitle($request->getActionName())
    				  ->headTitle($request->getControllerName());
    			$this->view->headTitle('Epoxia-Oragis Admin');
    			$this->view->headTitle()->setSeparator(' | ');
    		}
    	}

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 31
    Points : 36
    Points
    36
    Par défaut
    Les méthodes genre headTitle() sont des helpers de vue, tu dois donc les utiliser dans tes vues.

    En les utilisant dans ton contrôleur tu mélanges le traitement des données et leur affichage, je te conseille donc de faire comme ça :

    Dans ton contrôleur, tu définis ton title dans une variable template, que récupères dans ta vue :

    Dans ton action :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php
    public function monactionAction()
    {
        $this->view->title = "Mon titre !";
    }
    Et dans ta vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <?php 
    echo $this->headTitle($this->title); 
    ?>

  8. #8
    Membre expert
    Avatar de Eusebe
    Inscrit en
    Mars 2006
    Messages
    1 992
    Détails du profil
    Informations personnelles :
    Âge : 46

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Ce sont bien des aides de vues, mais tout leur intérêt est d'être utilisées en dehors de ces vues : http://framework.zend.com/manual/fr/...tial.headtitle
    Citation Envoyé par manuel ZF
    Exemple 53.16. Utilisation basique de l'aide HeadTitle

    Vous pouvez spécifier la balise de titre à n'importe quel moment. Un usage typique serait de paramètrer les différents segments du titre à chaque niveau de profondeur de votre application : site, module, contrôleur, action et ressources potentielles.
    Cela permet notamment assez facilement d'obtenir un titre comme 'Nom du site - module - contrôleur - action - titre' sans avoir à concaténer explicitement tout ça au niveau de l'action par exemple.

    Pour répondre à la question de citronbleu-v, ajouter des fichiers dans le répertoire 'library' ne signifie pas toucher à la bibliothèque Zend (qui se trouve d'ailleurs dans library/Zend). Tu pourras aussi en avoir besoin si tu te lances par exemple dans l'écriture de plugins de contrôleur.

    D'ailleurs, dans ton cas, tu pourrais utiliser un plugin plutôt que créer une classe BaseController qui définisse sa fonction init(). Cela éviterait d'avoir à appeler la méthode init() du parent si tu as besoin de cette méthode dans un contrôleur particulier...

Discussions similaires

  1. Porter un code procédural dans un framework MVC (CodeIgniter/CakePHP etc.)
    Par geekforever dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 03/09/2010, 11h35
  2. Réponses: 0
    Dernier message: 07/07/2008, 23h56
  3. [GEF]GEF EditViewPart MVC etc...
    Par georgemel dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 19/07/2007, 19h07
  4. Documentation gratuite sur l'API Windows, COM, DCOM, OLE, etc.
    Par Community Management dans le forum Windows
    Réponses: 1
    Dernier message: 16/11/2006, 15h28
  5. [Choix] SGDB pour Entreprise : coût, efficacité, etc.
    Par grassat dans le forum Décisions SGBD
    Réponses: 4
    Dernier message: 15/06/2002, 08h52

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