Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 17-05-2009 12:17:25

othmane126
Nouveau membre
Lieu: Casablanca
Date d'inscription: 17-05-2009
Messages: 5
Site web

[Zend_Controller_Router][1.7.8]Problème avec la réécriture de lien en

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:

$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:

<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 :cry::cry::cry:

Dernière modification par othmane126 (23-05-2009 13:17:17)

Hors ligne

 

#2 17-05-2009 15:22:44

Seazer
Membre
Date d'inscription: 25-04-2009
Messages: 25

Re: [Zend_Controller_Router][1.7.8]Problème avec la réécriture de lien en

Ton titre comporte des espaces et des accents ?
Pourquoi ne pas rajouter un champ "alias" ou autre dans ta table qui serait le titre sous cette forme :

Titre : Le titre de l'annonce.

Alias : le-titre-de-annonce

Les espaces deviennent des -
Les lettres avec leur apostrophe deviennent des - (comprenant aussi l'espace avant)
Les points sont supprimés
Tout les accents sont retirés des lettres

Cela te ferai donc une url comme cela : %typeAnnonce%-%idAnnonce%-%alias%.html

Et le titre pourra comporter des accents, espaces etc...

Tu peux avec cette solution soit convertir ton titre pour remplir ton alias ou fournir un champ dans le formulaire pour mettre un alias.

Ensuite pour récupérer ta ligne correspondante, tu vérifie ton typeAnnonce, idAnnonce et sont alias si il ne retourne rien ->Erreur.

Dernière modification par Seazer (17-05-2009 15:33:31)

Hors ligne

 

#3 17-05-2009 17:23:26

othmane126
Nouveau membre
Lieu: Casablanca
Date d'inscription: 17-05-2009
Messages: 5
Site web

Re: [Zend_Controller_Router][1.7.8]Problème avec la réécriture de lien en

Bonjour,
je vous remercie Seazer pour votre réponse. En fait, pour le moment je ne me soucis pas des accents et espaces dans l'url mais plutôt du chemin généré par le router qui est complétement erroné. Il me donne un lien sous la forme localhost/proweb/annonces/liste-annonces/typeAnnonce/1/proweb/annonces/type-des-annonces/1-8-Offre+emploi+1+modifi%C3%A9.html alors qu'il faut qu'il aie la forme suivante :
localhost/proweb/annonces/type-des-annonces/1-8-Offre+emploi+1+modifi%C3%A9.html

Hors ligne

 

#4 17-05-2009 23:57:41

Seazer
Membre
Date d'inscription: 25-04-2009
Messages: 25

Re: [Zend_Controller_Router][1.7.8]Problème avec la réécriture de lien en

Ton problème doit venir du : "$config->site->url"

Essaye plutôt avec quelque chose comme ceci :

Code:

$router->addRoute(
        "detailsAnnonce",
        new Zend_Controller_Router_Route_Regex(
            '(\w+)/(\w+)/(\w+)/annonce/(\.+)/(\d+)-(\d+)-(\.+).html',
            array(
                'module'     => 'Index',
                'controller' => 'Annonces',
                'action'     => 'details'
            ),
            array(
                1 => 'textTypeAnnonce',
                2 => 'typeAnnonce',
                3 => 'idAnnonce',
                4 => 'titreAnnonce'
            )
        )
    );

Je ne peux pas le tester, j'ai essayé de te pondre un code, il peux y avoir des petites erreurs.

P. S. : Je ne connaissais pas le "$this->url(array())", merci j'aurais moi même appris quelque chose. wink

Dernière modification par Seazer (18-05-2009 00:06:38)

Hors ligne

 

#5 18-05-2009 00:49:33

othmane126
Nouveau membre
Lieu: Casablanca
Date d'inscription: 17-05-2009
Messages: 5
Site web

Re: [Zend_Controller_Router][1.7.8]Problème avec la réécriture de lien en

Bonjour, merci seazer pour ton aide wink je vois que vous êtes le seul ici qui s'y connait en Zend_Controller_Router
Je viens d'utilser ton code et ça me donne l'erreur suivante :

Code:

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

J'ai cherché sur internet mais pas de solution concernant cette erreur :s :s

Hors ligne

 

#6 18-05-2009 10:16:37

Seazer
Membre
Date d'inscription: 25-04-2009
Messages: 25

Re: [Zend_Controller_Router][1.7.8]Problème avec la réécriture de lien en

Non je ne doit pas être le seul et heureusement d'ailleurs.

J'essaye juste d'aider avec mon infime connaissance de ce formidable framework.

En faite je crois que mon code est beaucoup trop personnel (Initializer quand tu nous tiens !), je vais essayer de t'en faire un plus générique.

Code:

$routeDetailsAnnonce = new Zend_Controller_Router_Route_Regex(
            'annonce/(\.+)/(\d+)-(\d+)-(\.+).html',
            array(
                'module'     => 'Index',
                'controller' => 'Annonces',
                'action'     => 'details',
                1               => 'defaultValueTextTypeAnnonce',
                2               => 'etc...'
            ),
            array(
                1 => 'textTypeAnnonce',
                2 => 'typeAnnonce',
                3 => 'idAnnonce',
                4 => 'titreAnnonce'
            ),
            'annonces/%s/%d-%d-%s.html'
        )
    );
$router->addRoute('detailsAnnonce', $routeDetailsAnnonce);

Là, ton url sera de la forme :

root/annonces/textTypeAnnonce/typeAnnonce-idAnnonce-titreAnnonce.html

Comme tu le voit on revient à la case départ mais sans ton "$config->site->url".

P. S. : J'aime bien ton "voutoiement". wink

Au pire, voilà un tutoriel qui pourra t'aider.

En attente d'un retour.

Dernière modification par Seazer (18-05-2009 10:18:19)

Hors ligne

 

#7 21-05-2009 00:35:03

othmane126
Nouveau membre
Lieu: Casablanca
Date d'inscription: 17-05-2009
Messages: 5
Site web

Re: [Zend_Controller_Router][1.7.8]Problème avec la réécriture de lien en

Bonjour,
Ouuf enfin ça marche !  Au moins une partie ! Merci beaucoup seazer maintenant j'obtiens les urls sous la forme que je veux, ex :

Code:

/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

j'obtiens l'exception suivante

Code:

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 maintenan :
index.php

Code:

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:

                      <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>

Hors ligne

 

#8 23-05-2009 13:14:41

othmane126
Nouveau membre
Lieu: Casablanca
Date d'inscription: 17-05-2009
Messages: 5
Site web

Re: [Zend_Controller_Router][1.7.8]Problème avec la réécriture de lien en

Bonjour,
maintenant c'est parfait, j'avais un problème avec l'expression régulière.
index.php

Code:

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:

                     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>
                            ';

Dernière modification par othmane126 (23-05-2009 13:15:21)

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