CodeIgniter: URI и формы - PullRequest
       13

CodeIgniter: URI и формы

1 голос
/ 03 апреля 2009

Я реализую окно поиска с помощью CodeIgniter, но я не уверен, как мне следует передавать параметры поиска. У меня есть три параметра: строка поиска; Категория продукта; и порядок сортировки. Они все по желанию. В настоящее время я отправляю параметры через $_POST во временный метод, который перенаправляет параметры в обычную форму URI. Это отлично работает. Я использую странный формат URI, хотя:

http://site.com/products/search=computer,sort=price,cat=laptop

Есть ли у кого-нибудь лучший / более чистый формат передачи данных? Я думал о том, чтобы передать его в метод products в качестве аргументов, но поскольку параметры являются необязательными, все может стать беспорядочным. Должен ли я смириться с этим и просто включить $_GET методы? Заранее спасибо!

Ответы [ 3 ]

3 голосов
/ 03 апреля 2009

Строки запроса

Вы можете включить строки запросов в CodeIgniter , чтобы разрешить более стандартную функцию поиска.

config.php

$config['enable_query_strings'] = FALSE;

После включения вы можете принять в своем приложении следующее:

http://site.com/products/search?term=computer&sort=price&cat=laptop

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

Недостатком этого подхода является то, что вы идете вразрез с одним из проектных решений команды разработчиков CodeIgniter. Однако, по моему личному мнению, это нормально, если строки запроса не используются для большей части вашего контента, только для особых случаев, таких как поисковые запросы.

1 голос
/ 27 ноября 2010

Гораздо лучший подход и метод, который разработчики CI планировали, - это добавить все параметры поиска в URI вместо строки запроса, например:

http://site.com/products/search/term/computer/sort/price/cat/laptop

Затем вы должны проанализировать все сегменты URI из 3-го сегмента («term») вперед в массив пар ключ => значение с функцией uri_to_assoc($segment) из класса URI.

Class Products extends Controller {
...

    // From your code I assume you are calling a search method.
    function search()
    {
        // Get search parameters from URI.
        // URI Class is initialized by the system automatically.
        $data->search_params = $this->uri->uri_to_assoc(3);
        ...
    }
    ...
}

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

$data->search_params теперь будет содержать массив ваших сегментов URI:

Array
(
    [term] => computer
    [sort] => price
    [cat] => laptop
)

Подробнее о классе URI читайте здесь: http://codeigniter.com/user_guide/libraries/uri.html

0 голосов
/ 03 апреля 2009

Если вы используете фиксированное количество параметров, вы можете назначить им значение по умолчанию и отправить его, а не отправлять параметр вообще. Например

 http://site.com/products/search/all/somevalue/all

Далее, в контроллере вы можете игнорировать параметр if (параметр == 'all'.)

 Class Products extends Controller {
 ...

     // From your code I assume that this your structure.
     function index ($search = 'all', $sort = 'price', $cat = 'all')
     {
         if ('all' == $search)
         {
            // don't use this parameter
         }
         // or
         if ('all' != $cat)
         {
            // use this parameter
         }
         ...
     }
     ...
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...