Как создать удобный для пользователя URI в CodeIgniter?

#codeigniter #friendly-url

#codeigniter #удобный url

Вопрос:

Я вроде как новичок в CodeIgniter.

Мне нужно разработать простой веб-сайт, на котором я извлекаю информацию из базы данных. Информация из базы данных касается рекламы. У меня есть информация о стране, зоне страны, местоположении зоны и виде рекламы.

Моя цель — иметь URI, подобный:

 http://www.someurl.com/index.php/country/country_zone/zone_location/ad_type/title_of_ad
  

Есть какая-то информация о том, как это сделать с помощью CodeIgniter?

С наилучшими пожеланиями,

Комментарии:

1. CI Reactor поддерживает строки запросов — возможно, вам лучше обратить на это внимание, поскольку подобный URI может довольно быстро запутать, тогда как ?country=ukamp;zone=swamp;ad_type=fullamp;title=foo , по крайней мере, имеет некоторое семантическое значение (возможно, также с точки зрения SEO, а также пользователя)

2. Я думаю, для вас будет разумно показать, как на самом деле выглядит ваш текущий URL. Существует около миллиона способов сделать то, что вы просите, это будет зависеть от того, с чем вы работаете. Я бы также опубликовал ваш контроллер.

Ответ №1:

Я думаю, что самый простой способ — создать пользовательский маршрут в вашем application/config/routes.php . Что-то вроде этого:

 $route['^(:any)/(:any)/(:any)/(:any)/(:any)'] = "your_controller/get_ads/$1/$2/$3/$4/$5";
  

тогда ваша функция контроллера будет выглядеть примерно так:

 function get_ads($country, $country_code, $zone_location, $ad_type, $title_of_ad) {
    // your code
}
  

.. вы можете заменить (:any) более конкретным регулярным выражением, если в аргументах есть какой-то шаблон.

Ответ №2:

первые 2 аргумента в вашей ссылке — это имя вашего контроллера и метод этого контроллера, который вы хотите вызвать.

итак

 http://www.someurl.com/index.php/country/country_zone/zone_location/ad_type/title_of_ad
  

это означало бы, что вы вызываете country_zone метод вашего country контроллера и передаете zone_location, add_type и title_of_ad этому методу.

то, что вы хотите, это

 http://www.someurl.com/index.php/TheControler/themethod/country/country_zone/zone_location/ad_type/title_of_ad
  

реализовано вот так:

 class TheControler extends Controler{
    function themethod($country,$country_zone,$zone_location,$ad_type,$title_of_ad){
        //your code
    }
}