Похоже, это совсем немного, есть несколько вариантов:
Вариант 1: пользовательский класс маршрута
Я разместил пост в блоге с подробным примером того, как добиться этого в ZF с помощью пользовательского класса маршрута, см .:
http://tfountain.co.uk/blog/2010/9/9/vanity-urls-zend-framework
Возможно, это не самый простой подход, но, на мой взгляд, он самый лучший, поскольку он позволяет вам настроить маршрут имени пользователя, как и любой другой, и вы все равно можете использовать стандартные помощники ZF URL и другие игрушки маршрутизации.
Вариант 2: расширение маршрутизатора
Другой подход заключается в расширении стандартного маршрутизатора ZF и последующей проверке маршрута имени пользователя, прежде чем делать что-либо еще. Что-то вроде:
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);
}
}
Затем вам нужно указать фронт-контроллеру использовать ваш маршрутизатор вместо используемого по умолчанию, так что в вашей начальной загрузке:
protected function _initRoutes()
{
Zend_Controller_Front::getInstance()->setRouter(new My_Router());
}
замените 'My' собственным пространством имен вашего приложения.
Если вы будете следовать этому подходу, вы не сможете использовать URL-помощник для маршрутов вашего имени пользователя, и все может стать немного запутанным, если вы начнете нуждаться в добавлении других пользовательских функций, поэтому используйте вместо этого собственный класс маршрута.