2013-09-24 3 views
5

Я строй своего первого приложения CodeIgniter и мне нужно сделать URL-адресу нравится следующим образом:CodeIgniter - Дополнительные параметры

controllername/{uf}/{city} 

Пример:/т/рио-де-жанейро Этот пример должен дать мне 2 параметр: $ уф ('т') и $ город ('рио-де-жанейро')

Другой URL возможно это:

controllername/{uf}/{page} 

Пример:/т/3 Этот пример должен дать мне 2 параметра s: $ uf ('rj') и $ page (3)

Другими словами, параметры «город» и «страница» являются дополнительными. Я не могу передать что-то вроде '/ uf/city/page'. Мне нужно всегда или «город» ИЛИ «страница». Но я не знаю, как настроить эти маршруты в конфигурации CodeIgniter, чтобы указать на тот же метод (или даже на различные методы).

ответ

11

Я нашел правильный результат:

$route['controllername/(:any)/(:any)/(:num)'] = 'ddd/index/$1/$2/$3'; 
$route['controllername/(:any)/(:num)'] = 'ddd/index/$1/null/$2'; // try 'null' or '0' (zero) 
$route['controllername/(:any)'] = 'ddd/index/$1'; 

индексного метод (внутри "ControllerName") должен быть:

public function Index($uf = '', $slug = '', $pag = 0) 
{ 
    // some code... 

    if (intval($pag) > 0) 
    { 
     // pagination 
    } 

    if (!empty($slug)) 
    { 
     // slug manipulation 
    } 
} 

Надеется, что это поможет кому-то. Спасибо всем.

+0

Он по-прежнему не пропускает «нуль» в моем случае. Я всегда получаю следующий параметр на этом месте. –

+2

@ V.Vachev пытается передать 0 (ноль), а не null. –

+0

Именно так я и сделал, и он работает правильно. Нуль кажется некоторым «специальным/зарезервированным» словом для маршрутов. У него определенно другое поведение. –

1
public function my_test_function($not_optional_param, $optional_param = NULL) 
    { 
    //do your stuff here 
    } 

Вы пробовали это?

+0

Да. Но второй параметр - вариант. Иногда это строка (city slug), другие - это число (страница). –

+1

См. Здесь о маршрутизации http://ellislab.com/codeigniter/user-guide/general/routing.html –

+0

Отлично! Я также могу использовать регулярные выражения вместо «: any» и «: num». Благодарю. –

0

Например, предположим, что у вас есть URI, как это:

  1. example.com/index.php/mycontroller/myfunction/hello/world
  2. example.com/index.php/mycontroller/ MyFunction/привет

Ваш метод будет передан URI сегменты 3 и 4 («привет» и «мира»):

класс MyController распространяется CI_Controller {

public function myFunction($notOptional, $optional = NULL) 
{ 
    echo $notOptional; // will return 'hello'. 
    echo $optional; // will return 'world' using the 1st URI and 'NULL' using the 2nd. 
} 

}

Ссылка: https://codeigniter.com/user_guide/general/controllers.html

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