Если честно, создание формы для выполнения работы с гиперссылками немного семантически нет.
Codeigniter по умолчанию полностью удаляет любые параметры $ _GET. Поэтому, не включив строки запросов в конфигурации, вы не сможете сделать следующее:
http://my -domain.com / скрипт /? = 1 парам и param2 = Foo
Для новичков, сегментированные URL-адреса являются чем-то вроде кривой обучения, но вскоре имеют смысл. Хорошим примером того, как сегментированные URL-адреса работают на практике, является переполнение стека!
Так что, если вы хотите скопировать страницу просмотра вопросов переполнения стека со следующим URL в codeigniter:
/1667417/codeigniter-peredacha-peremennyh-cherez-url-alternativa-ispolzovaniy-get
В вашем контроллере по умолчанию создайте следующий метод:
public function questions()
{
$question_id = $this->uri->segment(2);
// now do something with our question_id
}
Третий сегмент (заголовок вопроса) эффективно игнорируется. Но вы можете получить это с помощью следующего:
$question_title = $this->uri->segment(3);
Больше информации здесь: https://codeigniter.com/user_guide/libraries/uri.html
Если вам не нравится идея именовать метод в вашем контроллере с первым URI-сегментом. Вы можете создать собственный маршрут в своей конфигурации маршрутов.
Итак, представьте, что вы создали контроллер с именем questions_controller.php
и у вас есть метод с именем show_question_by_id()
. Чтобы сохранить URI в стиле /questions/1234/some-text-here
, но обрабатывать его с помощью контроллера / метода, описанного выше, вы можете создать следующий маршрут:
$route['question/(:num)'] = "questions_controller/show_question_by_id/$1";
Больше информации здесь: https://codeigniter.com/user_guide/general/routing.html
Если вы хотите, чтобы в вашем URL было бесконечное количество параметров, или вы не знаете, какие параметры ожидать, например, mysite.com/my_page/param1/12/param2/foo/param3/bar/param4/baz/another-param/xyz-123
Вы можете разделить их на ассоциативный массив, используя метод $this->uri->uri_to_assoc(1)
URI, чтобы получить следующее:
[array]
(
'param1' => '12'
'param2' => 'foo'
'param3' => 'bar'
'param3' => 'baz'
'another-param' => 'xyz-123'
)
Затем вы можете обработать это точно так же, как если бы вы использовали массив $ _GET. Затем вы можете объединить этот подход с пользовательскими маршрутами, чтобы получить практически любой URI и структуру приложения, которые вам нравятся. Вы также получаете преимущество в том, что каждый параметр и сегмент автоматически очищаются. Это что-то вроде кривой обучения, и для начала это может показаться дополнительной работой, но на самом деле она довольно гибкая и помогает создавать хорошо структурированное приложение.