2013-04-02 2 views
0

exmple: эта нагрузка по умолчанию контроллер/класс с функцией page,

www.example.com/page 

, если мы не контроллер/класс с именем page и установить $route['page'] = 'page'; он будет загрузить контроллер. Но если мы не установим $route, он все равно загрузит default_controller.

- это правда, что controller обязательно должен иметь $route['']? не удается ли загрузить контроллер page без установленного $route['']даже нет функции контроллера по умолчанию с таким же именем?

Edit:

получить доступ

www.mysite.com/index.php/user 

У меня есть user контроллер с index функции, но мой файл маршрут содержать только:

$route['default_controller'] = 'page'; 
$route['(:any)'] = 'page/$1'; 
$route['product'] = 'product'; 
//$route['user'] = 'user'; 
$route['404_override'] = ''; 

возвращается 404, работает только в если я раскомментирую это: $route['user'] = 'user';

Почему?

Спасибо.

ответ

1

Нет, это неправда. CodeIgniter, по умолчанию, directly maps URI segments на:

example.com/index.php/controller/method/param/param/... 

Или, если у вас есть подобное решение/.htaccess для удаления index.php:

example.com/controller/method/param/param/... 

Routing используется, когда вы хотите использовать URL, который делает а не непосредственно на эту конвенцию.

Редактировать: У вас конфликтующие пути. CodeIgniter будет смотреть на каждый маршрут по порядку сверху вниз, и если он найдет тот, который соответствует, он перестает искать и обрабатывает этот маршрут. Поскольку у вас есть маршрут (:any) catch-all, он будет соответствовать что-нибудь (как говорится).

Правило большого пальца состоит в том, чтобы сначала разместить ваши наиболее специфические маршруты, а затем получить более общий и поймать позже. Ваш маршрут (:any) должен быть последним в вашем списке. И контроллер по умолчанию и 404 переопределения должны оставаться первыми.

$route['default_controller'] = 'page'; 
$route['404_override'] = ''; 

$route['product'] = 'product'; 
$route['user'] = 'user'; 
$route['(:any)'] = 'page/$1'; 

Вы должны добавить product и user маршруты, потому что вы определили (:any) маршрут. Если вы хотите избежать написания правил маршрута для каждого из существующих контроллеров, но все же воспользуйтесь контроллером catch-all, подумайте об использовании контроллера или метода 404_override. Вы можете выполнить проверку, чтобы проверить, действителен ли URI. Просто убедитесь, что вы выбрали ошибку 404, если нет (вы можете использовать show_404()), так как там будет маршрутизирован любой несуществующий URL.

+0

загляните в мое редактирование. Спасибо, в любом случае. – egig

+0

У вас конфликтующие маршруты, требующие определения каждого существующего контроллера. –

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