Обычно я бы просто использовал параметры URL GET, но CodeIgniter, похоже, не нравится им, и ни одна из вспомогательных функций URL не предназначена для них, поэтому я пытаюсь сделать это «способом CodeIgniter».
Я хотел бы создать страницу, на которой модель может принимать несколько различных параметров URI, ни один из которых не обязательно присутствует, и ни один из них не должен быть в каком-либо определенном порядке, как обычная строка запроса URL с параметрами get.
Допустим, у меня есть следующий URL:
http://example.com/site/data/name/joe/
Здесь, не считая контроллера или метода, будет один параметр:
$params = $this->uri->uri_to_assoc(1);
print_r($params);
// output
array( [name] => [joe] )
Если бы я хотел изменить 'joe'для «луча» я мог бы сделать это:
echo anchor('name/ray');
Достаточно просто, но что, если есть больше параметров и положение параметров меняется?Например:
http://example.com/site/data/town/losangeles/name/joe/
http://example.com/site/data/age/21/name/joe/town/seattle
Можно ли просто захватить URL-адрес и вывести его только с измененным параметром 'name'?
Редактировать: В соответствии с рекомендациями LandonsЯ взял его скрипт и настроил его как вспомогательную функцию url, создав файл:
application/helpers/MY_url_helper.php
По сути, я переписал функцию current_url (), чтобы при желании принять массив параметров, которые будут подставлены в текущий URI,Если вы не передадите массив, функция будет работать как изначально:
function current_url($vars = NULL)
{
$CI =& get_instance();
if ( ! is_array($vars))
{
return $CI->config->site_url($CI->uri->uri_string());
}
else
{
$start_index = 1;
$params = $CI->uri->uri_to_assoc($start_index);
foreach ($vars as $key => $value)
{
$params[$key] = $value;
}
$new_uri = $CI->uri->assoc_to_uri($params);
return $CI->config->site_url($new_uri);
}
}
Работает нормальноЯ думаю, что суть в том, что мне не нравится 'CodeIgniter Way', и я буду смотреть на смешивание сегментированных URL-адресов со строками запросов или другой структурой в целом.