CodeIgniter, руководство пользователя к версии 1.6.1


Класс URI

Класс URI предоставляет функции помогающие извлекать информацию из строки URI. Если используется URI роутинг, то также извлекается информация о перенаправленных сегментах.

Примечание: Этот класс инициализируется системой автоматически, поэтому нет необходимости делать это вручную.

$this->uri->segment(n)

Позволяет извлекать определенные сегменты, где n — это номер извлекаемого сегмента. Сегменты нумеруются слева на право. Например, если полный URL такой:

http://www.your-site.com/index.php/news/local/metro/crime_is_up

, то номера сегментов будут следующие:

  1. news
  2. local
  3. metro
  4. crime_is_up

По-умолчанию функция возвращает FALSE (boolean), если сегменты отсутствуют. Опциональный второй параметр позволяет задать собственное значение по-умолчанию для отсутствующего сегмента. Например, следующим образом можно указать функции возвращать ноль в случае ошибки:

$product_id = $this->uri->segment(3, 0);

Это помогает избежать написания подобного кода:

if ($this->uri->segment(3) === FALSE)
{
    $product_id = 0;
}
else
{
    $product_id = $this->uri->segment(3);
}

$this->uri->rsegment(n)

Эта функция идентична предыдущей за тем исключением, что она позволяет извлечь определенный сегмент из перенаправленного сегмента URI, в случае использования функционала URI роутинга CodeIgniter'а.

$this->uri->slash_segment(n)

Эта функция также идентична $this->uri->segment() за тем исключением, что она позволяет с помощью второго параметра добавить к результату начальный и/или конечный слэш. Если параметр не задан, то добавляется конечный слэш. Примеры::

$this->uri->slash_segment(3);
$this->uri->slash_segment(3, 'leading');
$this->uri->slash_segment(3, 'both');

Возвращает:

  1. segment/
  2. /segment
  3. /segment/

$this->uri->slash_rsegment(n)

Эта функция идентична предыдущей, за тем исключением, что она позволяет добавить слэши к определенному сегменту в перенаправленном URI, в случае использования функционала URI роутинга CodeIgniter'а.

$this->uri->uri_to_assoc(n)

Эта функция позволяет преобразовать сегменты URI в ассоциативный массив пар ключ/значение. Рассмотрим следующий URI:

index.php/user/search/name/joe/location/UK/gender/male

Используя эту функцию, можно преобразовать URI в ассоциативный массив следующего вида:

[array]
(
    'name' => 'joe'
    'location' => 'UK'
    'gender' => 'male'
)

Первый параметр функции позволяет задать смещение. С тех пор как первый и второй сегмент URI содержат имя контроллера и функции, значение смещения по-умолчанию устанавливается в 3. Пример:

$array = $this->uri->uri_to_assoc(3);

echo $array['name'];

Второй параметр позволяет задать название ключа по-умолчанию, таким образом возвращаемый функцией масив всегда будут содержать ожидаемые индексы даже, если сегменты URI отсутствуют. Пример:

$default = array('name', 'gender', 'location', 'type', 'sort');

$array = $this->uri->uri_to_assoc(3, $default);

Если URI не содержит значение по-умолчанию, индексу массива все равно будет присвоенно это название, а его значение установленно в FALSE.

Наконец, если для данного ключа не найденно соответствующее значение (если заданно нечетное количество сегментов URI), то значение будет установенно в FALSE (boolean).

$this->uri->ruri_to_assoc(n)

Эта функция идентична предыдущей за тем исключением, что она создает ассоциативный массив используя перенаправленный URI, в случае использования функционала URI роутинга CodeIgniter'а.

$this->uri->assoc_to_uri()

Принимает на входе ассоциативный массив и генерирует из него строку URI. Ключи массива будут включенны в строку. Пример:

$array = array('product' => 'shoes', 'size' => 'large', 'color' => 'red');

$str = $this->uri->assoc_to_uri($array);

// Генерирует: product/shoes/size/large/color/red

$this->uri->uri_string()

Возвращает строку с полным URI. Например, если полный URL имеет следующий вид:

http://www.your-site.com/index.php/news/local/345

, то функция вернет:

/news/local/345

$this->uri->ruri_string(n)

Эта функция идентична предыдущей за тем исключением, что она возвращает перенаправленный URI, в случае использования функционала URI роутинга CodeIgniter'а.

$this->uri->total_segments()

Возвращает общее число сегментов.

$this->uri->total_rsegments()

Эта функция идентична предыдущей за тем исключением, что она возвращает общее число сегментов в перенаправленном URI, в случае использования функционала URI роутинга CodeIgniter'а.

$this->uri->segment_array()

Возвращает массив содержащий сегменты URI. Например:

$segs = $this->uri->segment_array();

foreach ($segs as $segment)
{
    echo $segment;
    echo '<br />';
}

$this->uri->rsegment_array(n)

Эта функция идентична предыдущей за тем иключением, что она возвращает массив сегменов в перенаправленном URI, в случае использования функционала URI роутинга CodeIgniter'а.