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 :

Tuto' "Débuter avec Zend Framework (approche MVC)" [ZF 1.10]


Sujet :

MVC PHP

  1. #1
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut Tuto' "Débuter avec Zend Framework (approche MVC)"
    Bonsoir !

    Alors voilà mon souci. J'ai fini le tutoriel, j'ai tout le code qu'il propose, toutes les pages etc. Mon souci, c'est que les actions ajouter et modifier de l'IndexController ne fonctionnent pas.
    Je pense que c'est du à mon Zend_Form vu que l'action supprimer, qui à contrario des deux actions citées ci-dessus ne contient pas mon Zend_Form, fonctionne.

    Voici un screenshot de l'erreur que mon navigateur me retourne (la même pour les deux actions) :


    Ensuite, l'arborescence de mon projet :


    Enfin, voici les différentes pages de code qui vous permettront (j'espère) d'élucider mon problème :

    IndexController.php
    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
    <?php
     
    class IndexController extends Zend_Controller_Action {
     
        public function init() {
            /* Initialize action controller here */
        }
     
        public function indexAction() {
            $this->view->title = "Mes Albums";
            $this->view->headTitle($this->view->title, 'PREPEND');
            $albums = new Model_DbTable_Albums();
            $this->view->albums = $albums->fetchAll();
        }
     
        public function ajouterAction() {
            $this->view->title = "Ajouter un nouvel album";
            $this->view->headTitle($this->view->title, 'PREPEND');
     
            $form = new Form_Album();
            $form->envoyer->setLabel('Ajouter');
            $this->view->form = $form;
     
            if ($this->getRequest()->isPost()) {
                $formData = $this->getRequest()->getPost();
     
                if ($form->isValid($formData)) {
                    $artiste = $form->getValue('artiste');
                    $titre = $form->getValue('titre');
     
                    $albums = new Model_DbTable_Albums();
                    $albums->ajouterAlbum($artiste, $titre);
     
                    $this->_redirect('/');
                }
                else
                    $form->populate($formData);
            }
        }
     
        public function modifierAction() {
            $this->view->title = 'Modifier l\'album';
            $this->view->headTitle($this->view->title, 'PREPEND');
     
            $form = new Form_Album();
            $form->envoyer->setLabel('Sauvegarder');
            $this->view->form = $form;
     
            if ($this->getRequest()->isPost()) {
                $formData = $this->getRequest()->getPost();
     
                if ($form->isValid($formData)) {
                    $id         = (int) $form->getValue('id');
                    $artiste    = $form->getValue('artiste');
                    $titre      = $form->getValue('titre');
     
                    $albums     = new Model_DbTable_Albums();
                    $albums     ->modifierAlbum($id, $artiste, $titre);
     
                    $this->_redirect('/');
                }
                else
                    $form->populate($formData);
            }
            else {
                $id = $this->_getParam('id', 0);
     
                if ($id > 0) {
                    $albums = new Model_DbTable_Albums();
                    $form->populate($albums->getAlbum($id));
                }
            }
        }
     
        public function supprimerAction() {
            $this->view->title = "Supprimer l'album";
            $this->view->headTitle($this->view->title, 'PREPEND');
     
            if ($this->getRequest()->isPost()) {
                $supprimer = $this->getRequest()->getPost('supprimer');
     
                if ($supprimer == 'Oui') {
                    $id = $this->getRequest()->getPost('id');
                    $albums = new Model_DbTable_Albums();
                    $albums->supprimerAlbum($id);
                }
     
                $this->_redirect('/');
            }
            else {
                $id = $this->_getParam('id', 0);
                $albums = new Model_DbTable_Albums();
                $this->view->album = $albums->getAlbum($id);
            }
        }
     
    }
    Form_Album.php
    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
    <?php
     
    class Form_Album extends Zend_Form {
     
        public function init() {
            $this->setMethod('POST');
        }
     
        public function __construct($options = null) {
            parent::__construct($options);
     
            $this->setName('album');
     
            $id = new Zend_Form_Element_Hidden('id');
     
            $artiste = new Zend_Form_Element_Text('artiste');
            $artiste->setLabel('Artiste')
                    ->setRequired(true)
                    ->addFilter('StripTags')
                    ->addFilter('StringTrim')
                    ->addValidator('NotEmpty');
     
            $titre = new Zend_Form_Element_Text('titre');
            $titre->setLabel('Titre')
                  ->setRequired(true)
                  ->addFilter('StripTags')
                  ->addFilter('StringTrim')
                  ->addValidator('NotEmpty');
     
            $envoyer = new Zend_Form_Element_Submit('envoyer');
            $envoyer->setAttrib('id', 'boutonenvoyer');
     
            $this->addElements(array($id, $artiste, $titre, $envoyer));
        }
    }
    ?>
    Albums.php (model)
    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
    <?php
     
    class Model_DbTable_Albums extends Zend_Db_Table_Abstract {
        protected $_name = "albums";
     
        public function getAlbum($id) {
            $id = (int) $id;
            $row = $this->fetchRow('id = ' . $id);
     
            if (!$row)
                throw new Exception('Count not find row : ' . $id);
     
            return $row->toArray();
        }
     
        public function ajouterAlbum($artiste, $titre) {
            $data = array(
                'artiste'   => $artiste,
                'titre'     => $titre
            );
     
            $this->insert($data);
        }
     
        public function modifierAlbum($id, $artiste, $titre) {
            $data = array(
                'artiste'   => $artiste,
                'titre'     => $titre,
            );
     
            $this->update($data, 'id = ' . (int) $id);
        }
     
        public function supprimerAlbum($id) {
            $this->delete('id = ' . (int) $id);
        }
    }
    ?>
    ajouter.phtml et modifier.phtml
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $this->form; ?>
    Merci d'avance !

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

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

    Bizarre comme comportement...

    Tu es sûr que l'action supprimer fonctionne ?
    Qu'est-ce que tu as comme message avec un autre navigateur ?

    Est-ce que le résultat change quand tu indiques l'environnement au début de ton fichier .htaccess (pour afficher les erreurs php et le détail des exceptions s'il y en a) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetEnv APPLICATION_ENV development

  3. #3
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Salut Eusebe.

    Citation Envoyé par Eusebe Voir le message
    Tu es sûr que l'action supprimer fonctionne ?
    Oui sur et certain.

    Citation Envoyé par Eusebe Voir le message
    Qu'est-ce que tu as comme message avec un autre navigateur ?
    Je n'ai pas pensé à tester avec d'autres browsers. Je regarderai ça ce soir

    Citation Envoyé par Eusebe Voir le message
    Est-ce que le résultat change quand tu indiques l'environnement au début de ton fichier .htaccess (pour afficher les erreurs php et le détail des exceptions s'il y en a) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SetEnv APPLICATION_ENV development
    J'essayerai ça ce soir et je te redirai

  4. #4
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Ca y est j'ai trouvé le souci... Ma classe Form_Album (mon formulaire donc) était contenue dans le fichier forms/Form_Album.php. D'où le souci, Zend cherchait forms/Album.php et ne la trouvait pas. Erreur de débutant ^^

    Juste une question cela dit, le fait de nommer ma classe différemment de mon fichier m'embrouille. Est-ce qu'on est obligé de faire comme c'est indiqué dans le tuto' ? C'est à dire nommer son fichier Album.php mais la classe Form_Album ? Je pense que oui mais dans le doute je demande

    Merci !

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

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 992
    Points : 3 344
    Points
    3 344
    Par défaut
    Ca n'a rien d'obligatoire, mais c'est une convention fortement conseillée...

    Si tu veux nommer tes classes différemment, tu devras soit les charger manuellement soit créer ton propre autoloader. Pour les explications, essaie de regarder le tuto sur l'autochargement avec le ZF :
    http://julien-pauli.developpez.com/t...r/autoloaders/

    Et par curiosité, c'est d'avoir mis la variable APPLICATION_ENV à development qui t'as permis de débugguer plus rapidement ?

  6. #6
    Membre actif Avatar de DarkSeiryu
    Homme Profil pro
    Développeur Java
    Inscrit en
    Janvier 2009
    Messages
    425
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Janvier 2009
    Messages : 425
    Points : 275
    Points
    275
    Par défaut
    Citation Envoyé par Eusebe Voir le message
    Et par curiosité, c'est d'avoir mis la variable APPLICATION_ENV à development qui t'as permis de débugguer plus rapidement ?
    Tout à fait. J'ai pu voir qu'il n'arrivait pas à trouver la classe Form_Album

    Merci bien pour tes explications !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 17/12/2009, 10h31
  2. Réponses: 8
    Dernier message: 18/03/2009, 22h12
  3. Réponses: 6
    Dernier message: 04/01/2009, 20h37
  4. Réponses: 6
    Dernier message: 16/09/2008, 20h35

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