Вы можете включить строки запроса и использовать $_GET
. ИМО, это прекрасный пример того, для чего предназначена строка запроса.
Обязательно измените форму на <form method="get" action="http://domain/class/index">
После этого в вашем URL появится строка запроса, например ?searchvar1=value1&searchvar2=value2
Вы можете получить доступ к частям строки следующим образом: $this->input->get('searchvar1')
С помощью метода, который вы используете в настоящее время, если пользователь ищет какие-либо символы, которые не разрешены в вашем $config['permitted_uri_chars']
, вам придется много кодировать и декодировать самостоятельно, чтобы убедиться, что строка безопасна / читаема в ваш URL. Класс CI Input позаботится об этом за вас, поэтому я рекомендую.
Другим недостатком поисковых параметров на основе сегментов URI является то, что не существует правильного способа выражения массива, подобного ?values[]=one&values[]=two&values[]=three
. Есть обходные пути, чтобы обойти это, но все они именно так: хаки. со временем у вас будут проблемы.
Использование $ _POST очень утомительно и заставляет использовать отправку форм для разбитых на страницы результатов и ссылок, а также гарантирует, что вы не можете ссылаться на результаты поиска или использовать кнопку "Назад" должным образом.
Если вы должны использовать этот метод, просто отправьте сообщение формы на ваш контроллер, прочитайте ввод, а затем redirect()
на URL, который вы создадите из него. Littlechad имеет правильную идею для этого метода в его ответ
// This URL:
http://domain/class/index/searchvar1/searcvar1val/searchvar2/searchvar2val
// With this:
$search = $this->uri->uri_to_assoc();
// Produces this:
array(
'searchvar1' => 'searchvarval1',
'searchvar2' => 'searchvarval2',
);
// And you can use it like this:
$arg1 = $search['searchvar1'];
$arg2 = $search['searchvar2'];
Чтобы получить ДО этого URL, вы можете сделать что-то вроде этого с вашей формой поста (в контроллере после поста):
$var1 = $this->input->post('searchvar1');
$var2 = $this->input->post('searchvar2');
redirect('searchvar1/'.urlencode($var1).'/searchvar2/'.urlencode($var2));
Я уверен, что вы можете увидеть, насколько это больше, чем просто использовать проверенную строку запроса ...