2009-12-26 4 views
-1

Можно создать дубликат:
CodeIgniter RoutingПочему переменные, передающие CodeIgniter?

Что должно происходить: пользователь переходит к URI, routes.php захватывает государство и направляет его на контроллер, контроллер возвращает некоторую информацию от запрос базы данных. Довольно простой материал.

Проблема: URI не передает переменную контроллеру. Я говорит

Отсутствует аргумент 1 для государств :: state_summary

я могу установить значение по умолчанию для аргумента функции, т. ($ st = 'Alabama'), и все работает плавно.

Я даже не вижу, как это возможно. Может быть, по крайней мере, скажите мне, что мне нужно, чтобы проверить, чтобы отследить ошибку.

URI:

http://example.com/index.php/states/Alabama 

routes.php:

$route['states/(.*)'] = "states/state_summary/$1"; 

Штаты контроллер:

... 

function state_summary($st) 
{ 
// DB query 
// Return data 
} 

... 
+0

Что произойдет, если вы дадите $ st значение по умолчанию? 'state_summary ($ st =" Alabama ")' – Sampson

+0

[Вы должны это увидеть. Спасибо:)] (http://stackoverflow.com/questions/1288258/codeigniter-routing) – Sarfraz

ответ

0

Я считаю, что маршрут должен регулируется следующим образом:

$route['states/(:any)'] = "states/state_summary/$1"; 

Это сработало для меня. Я не уверен, что (. *) Действителен, поскольку я никогда не видел его.

+0

'(. *)' Является допустимым регулярным выражением. –

+0

Ах, конечно. Ну, как я уже сказал, маршрут, указанный выше, работал для меня. Ты это пробовал? – Trae

+0

Тайлер, куда вы отправляете маршрут? Может быть, это имеет к этому какое-то отношение. По комментариям в routes.php «Зарезервированные маршруты должны появляться перед любыми шаблонами подстановочных знаков или регулярных выражений». – Trae

0

Ну, я никогда не пишу контроллер, чтобы иметь параметр, вместо этого я использую rsegment метод:

... 

function state_summary() 
{ 
    $st = trim($this->uri->rsegment(3)); 
    // DB query 
    // Return data 
} 
... 

с этим, у меня больше контроля с переданным параметром. Я могу дезинфицировать его, используя обрезку или intval, прежде чем передать его модели или библиотеки.

Кроме того, есть некоторые настройки в основной библиотеке codeigniter о маршрутизации URL-адреса. См. Его в файле system/libraries/Router.php, код внутри function _parse_routes() вокруг строк 278. Как работает маршрутизация URI в CI.

Смежные вопросы