альтернатива codeigniter для получения переменных - PullRequest
3 голосов
/ 26 ноября 2010

Я искал способ передать переменные "GET" в codeigniter и в итоге наткнулся на это: текст ссылки

Мне интересно, как это реализовать.

Например:

www.website.com / query даст мне каждую запись в БД.

Как правило, я бы имел

www.website.com / query /? Id = 5, чтобы получить эквивалентную запись.

когда я пытаюсь сделать это способом CI:

www.website.com / query / id / 5

Я получаю ошибку 404, так как он ищет класс с именем id и не может его найти.

есть ли способ получить пошаговый способ сделать это?

спасибо.

Ответы [ 3 ]

6 голосов
/ 27 ноября 2010

Два хороших способа добиться этого, используя методы, предназначенные разработчиками Codeigniter.

OPTION ONE:

Если вы всегда ожидаете присутствия параметра "id", вы можете воспользоватьсявозможность передать значение в URI сразу после метода (функции), который вы хотите вызвать.

Пример передачи /[controller]/[method]/[value]:

http://www.website.com/query/index/5

Затем вы получите доступ к значению "id "в качестве ожидаемого параметра функции.

Class Query extends Controller {
...

    // From your URL I assume you have an index method in the Query controller.
    function index($id = NULL)
    {
        // Show current ID value.
        echo "ID is $id";
        ...
    }
    ...
}

ВАРИАНТ ВТОРОЙ:

Если вы хотите разрешить передачу многих параметров в дополнение к идентификатору, вы можете добавить все параметры какkey => пары значений для сегментов URI в любом порядке.

Пример передачи /[controller]/[method]/[key1]/[val1]/[key2]/[val2]/[key3]/[val3]:

http://www.website.com/query/index/id/5/sort/date/highlight/term

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

Class Query extends Controller {
...

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

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

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

Array
(
    [id] => 5
    [sort] => date
    [highlight] => term
)

ГИБРИД ОДНОГО И ДВУХ:

Вы также можете сделать гибрид изгде идентификатор передается как ожидаемый параметр, а остальные параметры передаются как пары ключ => значение.Это хороший вариант, когда требуется идентификатор и все остальные параметры являются необязательными.

Пример передачи /[controller]/[method]/[id]/[key1]/[val1]/[key2]/[val2]:

http://www.website.com/query/index/5/sort/date/highlight/term

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

Class Query extends Controller {
...

    // From your code I assume you are calling an index method in the Query controller.
    function index($id = NULL)
    {
        // Show current ID value.
        echo "ID is $id";

        // Get parameters from URI.
        // URI Class is initialized by the system automatically.
        $data->params = $this->uri->uri_to_assoc(4);
        ...
    }
    ...
}

$id будет содержать ваше значение идентификатора, а $data->params будет содержатьмассив ваших сегментов URI:

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

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

test.com/query/id/4

Будет отображаться на контроллере:

$query->id($id);

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

Вы также можете передать значения параметров в качестве параметров POST, используя форму и входной класс CI.

0 голосов
/ 26 ноября 2010

Использование $ this-> uri-> uri_to_assoc (2) 2 - это смещение, когда вы начинаете свой ассоциативный массив сегментов во 2-м сегменте.Вам также понадобится маршрут для создания / запроса карты к контроллеру и методу (если вы не делаете это в методе index ()).

Итак, этот URL:

/запрос / id / foo / key / bar

можно прочитать, используя:

$get = $this->uri->uri_to_assoc(2);

echo $get['id']; // 'foo'
echo $get['key']; // 'bar'

Это не здорово, но работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...