Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 10-06-2013 15:41:23

Badoche
Nouveau membre
Date d'inscription: 04-06-2013
Messages: 4

Erreur "The requested controller was unable to dispatch the request."

Bonjour,


J'ai un problème sur mon application ZF2, j'ai deux actions du controller qui n'aboutissent pas avec l'erreur suivante :

"The requested controller was unable to dispatch the request."

Alors que sur mon controller les actions index, edit/xx , delete/xx fonctionnent (ou "xx" sont les id). Pourtant les deux autres actions que j'ai ajoutées sont aussi du type "otheraction/id".

Du coup je comprends pas d'ou ça vient

Voici les codes

La route en question :

Code:

'caracteristique' => array(
                'type'    => 'Segment',
                'options' => array(
                    'route'    => '/caracteristique[/:action][/:id]',
                    'constraints' => array(
                        'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                        'id'     => '[0-9]+',
                    ),
                    'defaults' => array(
                        'controller' => 'Application\Controller\Caracteristique',
                    ),
                ),
                'may_terminate' => true,
            ),

Le controller :

Code:

<?php
 
namespace Application\Controller;
 
use Zend\Mvc\Controller\AbstractActionController,
    Zend\View\Model\ViewModel, 
    Application\Form\CaracteristiqueForm,
    Doctrine\ORM\EntityManager,
    Application\Entity\Caracteristique;
 
class CaracteristiqueController extends AbstractActionController
{
    /**
     * @var Doctrine\ORM\EntityManager
     */
    protected $em;
 
    public function setEntityManager(EntityManager $em)
    {
        $this->em = $em;
    }
 
    public function getEntityManager()
    {
        if (null === $this->em){
            $this->em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
        }
        return $this->em;
    } 
 
    public function indexAction()
    {
        return new ViewModel(array(
            'serializer' => \Zend\Serializer\Serializer::factory('phpserialize'),
            'caracteristiques' => $this->getEntityManager()->getRepository('Application\Entity\Caracteristique')->findAll() 
        ));
    }
 
    public function addAction()
    {
        $form = new CaracteristiqueForm();
        $form->get('submit')->setAttribute('label', 'Add');
 
        $request = $this->getRequest();
        if ($request->isPost()) {
            $caracteristique = new Caracteristique();
            
            $form->setInputFilter($caracteristique->getInputFilter());
            $form->setData($request->getPost());
            if ($form->isValid()) { 
                $caracteristique->populate($form->getData()); 
                $this->getEntityManager()->persist($caracteristique);
                $this->getEntityManager()->flush();
 
                // Redirect to list of caracteristiques
                return $this->redirect()->toRoute('caracteristique'); 
            }
        }
 
        return array('form' => $form);
    }
 
    public function editAction()
    {
        $id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
        if (!$id) {
            return $this->redirect()->toRoute('caracteristique', array('action'=>'add'));
        } 
        $caracteristique = $this->getEntityManager()->find('Application\Entity\Caracteristique', $id);
 
        $form = new CaracteristiqueForm();
        $form->setBindOnValidate(false);
        $form->bind($caracteristique);
        $form->get('submit')->setAttribute('label', 'Edit');
        
        $request = $this->getRequest();
        if ($request->isPost()) {
            $form->setData($request->getPost());
            if ($form->isValid()) {
                $form->bindValues();
                $this->getEntityManager()->flush();
 
                // Redirect to list of albums
                return $this->redirect()->toRoute('caracteristique');
            }
        }
 
        return array(
            'id' => $id,
            'form' => $form,
        );
    }
 
    public function deleteAction()
    {
        $id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
        if (!$id) {
            return $this->redirect()->toRoute('caracteristique');
        }
 
        $request = $this->getRequest();
        if ($request->isPost()) {
            $del = $request->getPost('del');
            if ($del == 'Oui') {
                $id = (int)$request->getPost('id');
                $caracteristique = $this->getEntityManager()->find('Application\Entity\Caracteristique', $id);
                if ($caracteristique) {
                    $this->getEntityManager()->remove($caracteristique);
                    $this->getEntityManager()->flush();
                }
            }
 
            // Redirect to list of caracteristiques
            return $this->redirect()->toRoute('application', array(
                'controller' => 'caracteristique',
                'action'     => 'index',
            ));
        }
 
        return array(
            'id' => $id,
            'caracteristique' => $this->getEntityManager()->find('Application\Entity\Caracteristique', $id)->getArrayCopy()
        );
    }
    
    public function remove_sortAction()
    {   
        $id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
        if (!$id) {
            return $this->redirect()->toRoute('caracteristique');
        }
        
        $request = $this->getRequest();
        if ($request->isPost()) {
            $id_carac = $request->getPost('id_caracteristique');
            $sort = $this->getEntityManager()->find('Application\Entity\Sort', $id);
            $caracteristique = $this->getEntityManager()->find('Application\Entity\Caracteristique', $id_carac);
        
            if ($sort && $caracteristique) {
                $caracteristique->remove_sort($sort);
                $this->getEntityManager()->flush();
            }
        }

        return $this->response;
    }
    
    public function remove_competenceAction()
    {
        $id = (int)$this->getEvent()->getRouteMatch()->getParam('id');
        if (!$id) {
            return $this->redirect()->toRoute('caracteristique');
        }
        
        $request = $this->getRequest();
        if ($request->isPost()) {
            $id_carac = $request->getPost('id_caracteristique');
            $competence = $this->getEntityManager()->find('Application\Entity\Competence', $id);
            $caracteristique = $this->getEntityManager()->find('Application\Entity\Caracteristique', $id_carac); 
        
            if ($competence && $caracteristique) {
                $caracteristique->remove_competence($competence);
                $this->getEntityManager()->flush();
            }
        }
        
        return $this->response;
    }
}

La portion de la vue ou les liens sont générés :

Code:

<ul id="ul_crt_cmp_<?php echo $caracteristique->__get('caracteristique_id'); ?>">
                        <?php foreach ($caracteristique->__get('competences') as $competence): ?>
                            <li>
                                <a id="cmp_<?php echo $caracteristique->__get('caracteristique_id'); ?>" class="ajax" href="<?php echo $this->url('caracteristique',
                                array('action'=>'remove_competence', 'id' => $competence->__get('competence_id')));?>">X</a>
                                - <?php echo $competence->__get('competence_name'); ?>
                            </li>
                        <?php endforeach; ?>
                        </ul>

Voilà, si vous avez une idée n'hésitez pas ^^

P.S : à la base c'est une action ajax mais dans les deux cas (ajax ou appel de l'url en dur) je me retrouve avec une 404 unable to dispatch hmm

Hors ligne

 

#2 10-06-2013 15:57:41

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Erreur "The requested controller was unable to dispatch the request."

Salut, je suppose que se sont ces deux actions qui posent problème ?
remove_sortAction et remove_competenceAction ?

Hors ligne

 

#3 10-06-2013 16:00:56

Badoche
Nouveau membre
Date d'inscription: 04-06-2013
Messages: 4

Re: Erreur "The requested controller was unable to dispatch the request."

Oula oui pardon, j'ai parlé des méthodes qui marchent mais pas de celles qui ne marchent pas xD ce sont bien les remove_sortAction et remove_competenceAction !

Hors ligne

 

#4 10-06-2013 16:36:59

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Erreur "The requested controller was unable to dispatch the request."

La réponse est simple pas de underscore dans un nom de fonction big_smile. Toujours une majuscule à la place donc ça donnerait :
removeSortAction et removeCompetenceAction et pour y accéder ça doit être ça : remove-sort et remove-competence big_smile

Hors ligne

 

#5 11-06-2013 17:57:11

Badoche
Nouveau membre
Date d'inscription: 04-06-2013
Messages: 4

Re: Erreur "The requested controller was unable to dispatch the request."

Excuse moi j'ai oublié de te répondre hier, en effet ça fonctionne ! merci smile J'avais pas compris que la CamelCase est obligatoire sur zf2, je l'aime pas trop cette pratique mais bon tongue

Hors ligne

 

#6 11-06-2013 19:07:32

Orkin
Administrateur
Lieu: Paris
Date d'inscription: 09-12-2011
Messages: 1261

Re: Erreur "The requested controller was unable to dispatch the request."

C'est plus propre que les underscore partout ça fait parti des conventions de nommage wink.

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