2013-04-21 3 views
0

У меня есть простая проблема, но я просто не могу понять это. Я написал метод, который считывает параметры из url (один параметр, который является именем пользователя) и запрашивает все данные этому пользователю и отображает его на странице.Конфигурация маршрутов профиля профиля в codeigniter

Единственная проблема заключается в том, что метод является частью контроллера и, естественно, он должен показать в URL (который просто сказал:. Не слишком хорошо для обмена Кроме того, я должен написать строку следующим образом:

www.domain.com/controller/profile_guest?user=username 

Я хочу, чтобы избавиться от всего, что прежде, чем имя пользователя так это, чтобы показать, как:..

www.domain.com/username 

в настоящее время существуют два сценария, чтобы покрыть здесь

а) кто-то б rowse каталог, клики по имени профиля, а затем перенаправляется на страницу профиля. когда ему нравится то, что он видит, он копирует url и делится им.

b) кто-то получает общую ссылку и нажимает на нее, поэтому то, что должно загрузить, - это страница профиля с URL-адресом, который он получил не полностью, с указанием контроллера и метода.

это можно достичь?

Спасибо за помощь :)

Update:

$route['default_controller'] = "main/index"; 
$route['404_override'] = ''; 
+0

Да с маршрутами можно. Прочтите этот раздел в руководстве http://ellislab.com/codeigniter/user-guide/general/routing.html –

+0

Используйте функцию '404_override'. Проще говоря, если кто-то отправляется на URL-адрес, который еще не маршрутизирован/отображен в CodeIgniter, он будет вызывать то, что когда-либо контроллер/действие вы размещаете в '404_override'. Отсюда вы можете просто прочитать, какое имя пользователя они пытались прочитать, и показать соответствующую страницу. – Gavin

ответ

1

вы можете использовать этот маршрут:

$route['(:any)'] = "controller/profile_guest/$1"; 

, но и любой другой маршрут, вам нужно будет написать его вручную над этим маршрут. , например:

$route['controller/view'] = "controller/view"; 
$route['(:any)'] = "controller/profile_guest/$1"; 

Объясните:

Трассы обрабатываются в том порядке, в котором они появляются в вашем файле routes.php, так что если вы поставите $route['(:any)'] в верхней части, он будет обрабатывать все ,

Предположим, что у вас есть и регулятора, функции внутри него, и вы должны выполнить его, например: www.domain.com/contoller/function, вы можите выполнить вашу функцию, потому что она будет соответствовать этому маршруту $route['(:any)'], так что вам нужно определить маршрут он до того $route['(:any)'] , например:

$route['contoller/function'] = "controller/function" 
$route['(:any)'] = "controller/profile_guest/$1"; 

и сделать то же самое со всем вашим contollers и его функцией, но вы должны положить $route['(:any)'] на последний маршрут.

+0

У меня есть еще один маршрут на route.php, и он обновляется выше. не могли бы вы прояснить, что вы имеете в виду? –

+0

Я редактирую свой ответ. –

+0

Обратите внимание, что в CI 3.0+, ': any' будет * not * match slashes, поэтому он будет применяться только к одному сегменту URI. –

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