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

Autres composants PHP Discussion :

Problème avec Zend_Controller_Router [ZF 1.7]


Sujet :

Autres composants PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut Problème avec Zend_Controller_Router
    Bonjour,
    je développe avec zend framework depuis presque 10 mois et j'essai d'améliorer un peu mes connaissances. En fait, j'essai d'utiliser Zend_Controller_Router mais j'ai de gros problèmes avec.
    J'ai une page qui a l'url suivant :
    localhost/proweb/annonces/details/typeAnnonce/12/idAnnonce/17
    Et je veux lui donner la forme suivante :
    localhost/proweb/annonces/offres-emploi/12-17-titre-de-mon-annonce.html
    voici le code que j'ai mis dans le bootstrap
    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
    $route = new Zend_Controller_Router_Route_Regex(
        $config->site->url.'/annonces/(\.+)/(\d+)-(\d+)-(\.+).html',
        array(
            'module'=>'Index',
            'controller' => 'Annonces',
            'action' => 'details'
        ),
        array(
            1=>'textTypeAnnonce',
            2 => 'typeAnnonce',
            3 => 'idAnnonce',
            4=>'titreAnnonce'
        ),
        'annonces/%s/%d-%d-%s.html'
    );
    $router->addRoute('detailsAnnonce', $route);
    Et voici celui de ma page de vue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <a style="color:#2979C4;text-decoration:none;font-family:Arial,Verdana; font-size:14px;" href="'.$this->url(array('textTypeAnnonce'=>'type-des-annonces','typeAnnonce'=>$annonce->annonce_type_id,'idAnnonce'=>$annonce->annonce_id,'titreAnnonce'=>$annonce->annonce_titre),'detailsAnnonce').'">
                                '.$annonce->annonce_titre.'
                                 </a>
    Mais avec cette méthode le lien écris dans la source de la page est:
    ./proweb/annonces/type-des-annonces/1-8-Offre+emploi+1+modifi%C3%A9.html
    Et quand je clique dessus ça me donne 1 liens sous la forme
    localhost/proweb/annonces/liste-annonces/typeAnnonce/1/proweb/annonces/type-des-annonces/1-8-Offre+emploi+1+modifi%C3%A9.html
    S'il vous plait aidez moi

  2. #2
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    As-tu essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '/annonces/([^/]+)/(\d+)-(\d+)-(\.+).html'

  3. #3
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut Erreur fatale
    Bonjour,
    Je vous remercie Yogui pour avoir changé le forum et pour votre réponse.
    En fait je viens de l'essayer et ça me donne l'erreur suivante. J'ai cherché sur internet cette erreur mais sans succès
    Fatal error: Uncaught exception 'Zend_Controller_Router_Exception' with message 'Cannot assemble. Reversed route is not specified.' in D:\wamp\www\proweb\library\zend1.7.8\library\Zend\Controller\Router\Route\Regex.php:150 Stack trace: #0 D:\wamp\www\proweb\library\zend1.7.8\library\Zend\Controller\Router\Rewrite.php(377): Zend_Controller_Router_Route_Regex->assemble(Array, false, true) #1 D:\wamp\www\proweb\library\zend1.7.8\library\Zend\View\Helper\Url.php(49): Zend_Controller_Router_Rewrite->assemble(Array, 'detailsAnnonce', false, true) #2 [internal function]: Zend_View_Helper_Url->url(Array, 'detailsAnnonce') #3 D:\wamp\www\proweb\library\zend1.7.8\library\Zend\View\Abstract.php(329): call_user_func_array(Array, Array) #4 [internal function]: Zend_View_Abstract->__call('url', Array) #5 D:\wamp\www\proweb\application\Index\views\scripts\annonces\liste-annonces.phtml(24): Zend_View->url(Array, 'detailsAnnonce') #6 D:\wamp\www\proweb\library\zend1.7.8\library\Zend\View.php(107): include('D:\wamp\www\pro...') #7 D:\wamp\ in D:\wamp\www\proweb\library\zend1.7.8\library\Zend\Controller\Router\Route\Regex.php on line 150

  4. #4
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut
    Bonjour,
    Ouuf enfin ça marche ! Au moins une partie ! Maintenant j'obtiens les urls sous la forme que je veux, ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /proweb/annonces/Business/11-41-Business.html
    Mais j'ai encore un problème, c'est par exemple cet url si j'ajoute d'autres mots à la fin ça ne marche pas. Par ex avec cet url[code]/proweb/annonces/Business/11-41-Business-new.html[code] j'obtiens l'exception suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    atal error: Uncaught exception 'Zend_Controller_Action_Exception' with message 'Action "business" does not exist and was not trapped in __call()' in D:\wamp\www\proweb\library\zend1.7.8\library\Zend\Controller\Action.php:475 Stack trace: #0 D:\wamp\www\proweb\library\zend1.7.8\library\Zend\Controller\Action.php(505): Zend_Controller_Action->__call('businessAction', Array) #1 D:\wamp\www\proweb\library\zend1.7.8\library\Zend\Controller\Dispatcher\Standard.php(285): Zend_Controller_Action->dispatch('businessAction') #2 D:\wamp\www\proweb\library\zend1.7.8\library\Zend\Controller\Front.php(934): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http)) #3 D:\wamp\www\proweb\index.php(133): Zend_Controller_Front->dispatch() #4 {main} thrown in D:\wamp\www\proweb\library\zend1.7.8\library\Zend\Controller\Action.php on line 475
    Voici le code que j'utilise maintenant :
    index.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
     
    Zend_Loader::loadClass('Zend_Controller_Router_Route_Regex');
    $router = $frontController->getRouter();
     
    $routeDetailsAnnonce = new Zend_Controller_Router_Route_Regex(
                'annonces/(\w+)/(\d+)-(\d+)-(\w+).html',
                array(
                    'module'     => 'Index',
                    'controller' => 'Annonces',
                    'action'     => 'details',
                    1            => 'offres-emploi',
                    2            => 1,
                    3            => 1,
                    4            => 'titre-default'
                ),
                array(
                    1 => 'textTypeAnnonce',
                    2 => 'typeAnnonce',
                    3 => 'idAnnonce',
                    4 => 'titreAnnonce'
                ),
                'annonces/%s/%d-%d-%s.html'
        );
    $router->addRoute('detailsAnnonce', $routeDetailsAnnonce);
    la vue :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                          <a style="color:#2979C4;text-decoration:none;font-family:Arial,Verdana; font-size:14px;" href="'.
                                $this->url(
                                        array('textTypeAnnonce'=>$annonce['annonce_type_titre'],
                                              'typeAnnonce'=>$annonce['annonce_type_id'],
                                              'idAnnonce'=>$annonce['annonce_id'],
                                              'titreAnnonce'=>$annonce['annonce_titre']),
                                            'detailsAnnonce')
                                .'">
                                '.$annonce['annonce_titre'].'
                                 </a>

  5. #5
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Par défaut
    Salut

    Le pattern \w+ n'est pas suffisant pour matcher également les traits d'union

  6. #6
    Membre éclairé
    Homme Profil pro
    Consultant ERP
    Inscrit en
    Mai 2006
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Consultant ERP
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2006
    Messages : 257
    Par défaut Résolu
    Bonjour,
    maintenant c'est parfait, Merci yogui, c'est vrai j'avais un problème avec l'expression régulière.
    index.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
    Zend_Loader::loadClass('Zend_Controller_Router_Route_Regex');
    $router = $frontController->getRouter();
     
    $routeDetailsAnnonce = new Zend_Controller_Router_Route_Regex(
                'annonces/([A-Za-z-0-9\+]*)/(\d+)-(\d+)-([A-Za-z-0-9\+]*).html',
                array(
                    'module'     => 'Index',
                    'controller' => 'Annonces',
                    'action'     => 'details',
                    1            => 'offres-emploi',
                    2            => 1,
                    3            => 1,
                    4            => 'titre-default'
                ),
                array(
                    1 => 'textTypeAnnonce',
                    2 => 'typeAnnonce',
                    3 => 'idAnnonce',
                    4 => 'titreAnnonce'
                ),
                'annonces/%s/%d-%d-%s.html'
        );
    $router->addRoute('detailsAnnonce', $routeDetailsAnnonce);
    view:
    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
                         echo '<table style="background:#'.$bgColor.';width:100%;height:100px;">
                         <tr><td style="width:500px;">
                          <a style="color:#2979C4;text-decoration:none;font-family:Arial,Verdana; font-size:14px;" href="'.
                         $urlAnnonce=$this->url(
                                        array('textTypeAnnonce'=>$annonce['annonce_type_titre_alias'],
                                              'typeAnnonce'=>$annonce['annonce_type_id'],
                                              'idAnnonce'=>$annonce['annonce_id'],
                                              'titreAnnonce'=>$titre),
                                            'detailsAnnonce')
                                .'">
                                '.$annonce['annonce_titre'].'
                                 </a></td>
                             <td style="text-align:right;color:#2979C4">'.$annonce['date_ajout'].'</td></tr>
                         <tr><td colspan="2">'.$annonce['texte'].'</td></tr>
                         <tr>
                            <td style="">Ville:
                            <span style="color:#2969C4;font-weight:bold;text-transform: capitalize;">'.utf8_encode($annonce['ville']).'</span>
                            </td><td style="text-align:right">
                            <a style="color:#F0A42A;font-weight:bold;text-decoration:none;font-family:Arial,Verdana; font-size:14px;" href="'.$urlAnnonce.'">Voir détails&gt;&gt;</a></td></tr>
                                </table>
                                ';

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

Discussions similaires

  1. VC++ Direct3D8, problème avec LPD3DXFONT et LPD3DTEXTURE8
    Par Magus (Dave) dans le forum DirectX
    Réponses: 3
    Dernier message: 03/08/2002, 11h10
  2. Problème avec [b]struct[/b]
    Par Bouziane Abderraouf dans le forum CORBA
    Réponses: 2
    Dernier message: 17/07/2002, 10h25
  3. Problème avec le type 'Corba::Any_out'
    Par Steven dans le forum CORBA
    Réponses: 2
    Dernier message: 14/07/2002, 18h48
  4. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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