2014-10-20 3 views
0

Адрес страницы для профиля пользователя в моем ZF2 приложения:Zend framework2 URL Переписывая

http:/mywebsite/profile/index/index/457/ 

здесь 457 является идентификатор пользователя (например rogger_federer).

Я хочу, чтобы мой URL, чтобы выглядеть следующим образом (путем выборки пользователя из базы данных, используя идентификатор в URL)

http:/mywebsite/profile/rogger_federer 

мой файл Htaccess является

RewriteEngine On 
# The following rule tells Apache that if the requested filename 
# exists, simply serve it. 
RewriteCond %{REQUEST_FILENAME} -s [OR] 
RewriteCond %{REQUEST_FILENAME} -l [OR] 
RewriteCond %{REQUEST_FILENAME} -d 
RewriteRule ^.*$ - [NC,L] 
# The following rewrites all other queries to index.php. The 
# condition ensures that if you are using Apache aliases to do 
# mass virtual hosting, the base path will be prepended to 
# allow proper resolution of the index.php file; it will work 
# in non-aliased environments as well, providing a safe, one-size 
# fits all solution. 
RewriteCond %{REQUEST_URI}::$1 ^(/.+)(.+)::\2$ 
RewriteRule ^(.*) - [E=BASE:%1] 
RewriteRule ^(.*)$ %{ENV:BASE}index.php [NC,L] 

Какие изменения мне нужно сделать в .htaccess файл?

Пожалуйста, помогите. Я новичок в zend и не знаю, что такое htaccess и шаблоны.

Заранее спасибо.

ответ

0

В основном это не то, что вы можете сделать в .htaccess, потому что вам нужно заглянуть в свою БД.

Что происходит, когда вы получаете запрос, так это то, что он проходит через ваш htaccess сначала, а затем в маршрутизаторе. Конфигурация маршрутизации находится в файле конфигурации модуля.

Что вам нужно сделать, это изменить маршрут из профиля/index/index/457/(возможно, по умолчанию маршрут, вы можете указать свой конфигурационный файл для получения дополнительной информации), чтобы что-то принять профиль/rogger_federer (это было бы сегмент route/profile /: имя пользователя с ограничением для имени пользователя: ([AZ-az _] *) и не по умолчанию. Этот маршрут должен отправить вас на контроллер, где вы просматриваете db и выбираете пользователя на основе имени пользователя.

Вы также должны убедиться, что имя пользователя имеет единственное ограничение, и это Sluggable/инерционной (продезинфицировать для URL).

0

Вы должны генерировать слизняка на основе пользователей имя пользователя и сохранить это для пользователей БД записей

Для этого, например, можно использовать фильтр Alnum, а затем заменить пробел дефисом или подчеркиванием.

Затем нужно будет создать индекс на этом поле «слизняка» и использовать этот индекс при запросе DB для записи пользователей, а не идентификатор (который больше не будет доступна с URL)

слизняк в URL, должен быть выполнен в виде маршрута парам в вашей конфигурации маршрутизации, и вы можете легко получить доступ к его в действии контроллера с использованием Params() плагин:

$slug=$this->params('slug'); 
$userRepository->findBySlug($slug); 

исх: http://framework.zend.com/manual/2.0/en/modules/zend.mvc.plugins.html#the-params-plugin

Пример маршрутизации:

'update' => 

['type' => 'Zend\Mvc\Router\Http\Segment','options' => 
    ['route' => '/profile/:slug','constraints' => 
     ['id' => '[a-zA-Z0-9_-]*'],'defaults' => 
      ['controller' => 'User','action' => 'profile', 
             ] 
            ] 
           ] 

Ссылка:

ZF2 Routing: http://framework.zend.com/manual/2.3/en/modules/zend.mvc.routing.html

Смежные вопросы