Zend FR

Consultez la FAQ sur le ZF avant de poster une question

Vous n'êtes pas identifié.

#1 23-06-2009 22:56:26

gedeon555
Membre
Date d'inscription: 02-06-2009
Messages: 18

Créer un espace par membre accessible par des urls spécifiques

Bonjour, le titre de ce thread n'étant pas forcément limpide je formule en bref mon problème : Je n'y connais pas grand chose en routage sur Zend Framework.

Plus sérieusement, je voudrais créer sur mon site des espaces de nom dynamiques dans l'url. Plus clair encore, je voudrais que pour chaque utilisateur inscrit sur mon site, on puisse accéder à son espace à l'adresse :
http://www.monsite.com/benjamin/

Dans mon site, chaque membre peut ajouter des collections de dvd, cassettes, bandes dessinées donc il devrait etre possible d'accéder à
http://www.monsite.com/benjamin/cassettes/
http://www.monsite.com/benjamin/bds/
http://www.monsite.com/benjamin/dvds

Mais je ne sais pas du tout comment faire ceci, je sais juste qu'il faut manipuler le routage. Je ne sais pas non plus où manipuler le routage.

Je pencherai à un truc dans le bootstrap tel que ceci, sauf peut etre pour le Zend_Controller_Front::getInstance() :

Code:

    protected function _initUserDomains()
    {
        $router = Zend_Controller_Front::getInstance()->getRouter();

        $users = new Default_Model_User();
        foreach ($users->fetchAll() as $user)
        {
            $router->addRoute
            (
                /* ????????????????????? */
            );
        }
    }

Hors ligne

 

#2 24-06-2009 20:23:17

pastel
Membre
Date d'inscription: 24-06-2009
Messages: 12

Re: Créer un espace par membre accessible par des urls spécifiques

Tu peux faire des routes de ce type:

dans routes.ini par exemple:
en cosidérant une url complète du type:
http://www.monsite.com/profil/name/benj … cassettes/
controller => profil
action => index
variable name = benjamin
variable media = cassettes

Code:

routes.profil.route = "profil/:name/:media/"
routes.profil.defaults.controller = profil
routes.profil.defaults.action = index

dans ton Bootstrap.php

public function _initRoutes()
{
        $frontController = Zend_Controller_Front::getInstance();
        $routeur = $frontController->getRouter();
        $config_routes = new Zend_Config_Ini(APPLICATION_PATH.'/config/routes.ini');
        $routeur->addConfig($config_routes, 'routes');
}

Hors ligne

 

#3 25-06-2009 21:45:47

gedeon555
Membre
Date d'inscription: 02-06-2009
Messages: 18

Re: Créer un espace par membre accessible par des urls spécifiques

cette solution me convient peu. Je veux bien pass par /profile/benji mais /profile/name/benji je trouve ca nul, quelqu'un a une autre solution ?

Y a pas moyen genre de faire http://www.monsite.com/benjamin/:controller/:action ?

Et pouvoir récupérer ma variable dont la valeur est, dans ce cas, "benjamin" ?

Dernière modification par gedeon555 (25-06-2009 22:07:38)

Hors ligne

 

#4 25-06-2009 22:22:51

gedeon555
Membre
Date d'inscription: 02-06-2009
Messages: 18

Re: Créer un espace par membre accessible par des urls spécifiques

Pour l'instant j'ai fait :

Code:

public function _initRoutes()
    {
            $frontController = Zend_Controller_Front::getInstance();
            $routeur = $frontController->getRouter();

           $routeur->addRoute
           (
               'profile',
               new Zend_Controller_Router_Route('/profiles/:name/:controller/:action', array('controller' => 'index', 'action' => 'index'))
           );
    }

Mais quand j'essaie d'accéder à la page http://www.monsite.com/profiles/benji j'obtiens le joli message :

Code:

Fatal error: Uncaught exception 'Zend_Controller_Router_Exception' with message 'name is not specified' in library\Zend\Controller\Router\Route.php:349 Stack trace: 
#0 library\Zend\Controller\Router\Rewrite.php(433): Zend_Controller_Router_Route->assemble(Array, true, true) 
#1 library\Zend\View\Helper\Url.php(49): Zend_Controller_Router_Rewrite->assemble(Array, NULL, true, true) 
#2 library\Zend\View\Abstract.php(341): Zend_View_Helper_Url->url(Array, NULL, true) 
#3 [internal function]: Zend_View_Abstract->__call(Array, Array) 
#4 application\modules\admin\layouts\scripts\layout.phtml(26): Zend_View->url('url', Array) 
#5 library\Zend\View.php(107): include('G:\Work\Workspa...') 
#6 library\Zend\View\Abstract.php(832): Zend_View-> in library\Zend\Controller\Router\Route.php on line 349

Quand je fais un "Zend_Debug::dump($route->match('/profiles/benji'));

J'obtient ceci pourtant :

Code:

array(3) {
  ["name"] => string(5) "benji"
  ["controller"] => string(5) "index"
  ["action"] => string(5) "index"
}

Dernière modification par gedeon555 (25-06-2009 22:38:20)

Hors ligne

 

#5 26-06-2009 23:49:55

pastel
Membre
Date d'inscription: 24-06-2009
Messages: 12

Re: Créer un espace par membre accessible par des urls spécifiques

là solution que je t'ai proposé forme les URL que tu souhaite...
L'url longue et moche
http://www.monsite.com/profil/name/benj … cassettes/
devient
http://www.monsite.com/profil/benjamin/cassettes/

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