Cela semble venir un peu, il y a quelques options:
Option 1: classe de route personnalisée
J'ai mis un billet de blog avec un exemple détaillé de la façon de parvenir à ZF en utilisant une classe de route personnalisée, voir:
http://tfountain.co.uk/blog/2010/9/9/vanity-urls-zend-framework
cela pourrait ne pas être la méthode la plus simple, mais à mon avis, il est le meilleur, car il vous permet de configurer un usern Ame route comme un autre, et vous pouvez toujours utiliser les helpers ZF URL standard et autres jouets de routage.
Option 2: l'extension du routeur
Une autre approche consiste à étendre le routeur standard ZF et vérifiez un itinéraire nom d'utilisateur avant de faire quoi que ce soit d'autre.Quelque chose comme:
class My_Router extends Zend_Controller_Router_Rewrite
{
public function route(Zend_Controller_Request_Abstract $request)
{
$pathBits = explode('/', $request->getPathInfo());
if (!empty($pathBits[0])) {
// check whether $pathBits[0] is a username here
// with a database lookup, if yes, set params and return
}
// fallback on the standard ZF router
return parent::route($request);
}
}
Vous devez ensuite dire au contrôleur avant d'utiliser votre routeur au lieu de la valeur par défaut un, donc dans votre bootstrap:
protected function _initRoutes()
{
Zend_Controller_Front::getInstance()->setRouter(new My_Router());
}
remplacer « My » avec son propre espace de noms de votre application. Si vous suivez cette approche, vous ne pouvez pas utiliser l'assistant d'URL pour vos routes de nom d'utilisateur, et les choses peuvent devenir un peu brouillon si vous commencez à ajouter d'autres fonctionnalités personnalisées, alors utilisez plutôt la classe de routage personnalisée.
+1 Parce que c'est mon plus gros problème avec ZF (et d'autres fw aussi). Avec un moteur personnalisé, cela peut être facilement produit mais je n'ai jamais trouvé une bonne description de cette chose dans ZF par exemple. – fabrik