Маршрутизация не работает должным образом в CodeIgniter

0

mywebsite.com/it/moto/ должен перенаправляться на домашнюю страницу. Поэтому я написал это в routes.php

$route['(\w{2})/(auto|moto)/(.*)'] = '$3';
$route['(\w{2})/(auto|moto)'] = $route['default_controller'];

который работает очень хорошо. Кроме того, mywebsite.com/it/moto/mercatino маршрутов Mercatino контроллер, который идеально подходит.

Нет, я хочу, чтобы этот mywebsite.com/it/moto/mercatino/componenti-veicolo/221/molle-originali-r6 направлялся к этой функции внутри контроллера Mercatino

public function prodotto($category, $id, $title){

}

следовательно, я написал эту строку в routes.php

$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4";

Но я получаю ошибку 404. Любая идея, как это исправить?

Теги:
codeigniter
routing

2 ответа

0
Лучший ответ

Решенный таким образом

$route['(.*)/(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$3/$4/$5"; //rule 1
$route['(\w{2})/(auto|moto)/(.*)'] = '$3'; //rule 2
$route['(\w{2})/(auto|moto)'] = $route['default_controller']; //rule 3

mercatino правило mercatino перед всеми другими правилами и добавив (.*) mercatino.

0
$route['(mercatino|market){1}/(:any)/(:num)/(:any)'] = "mercatino/prodotto/$2/$3/$4";

Сколько каталогов находится в "mercatino/prodotto/$ 2/$ 3/$ 4"? По умолчанию codeigniter, я думаю, не входит в каталог больше уровня 2.

Я имею в виду, что когда codeigniter ищет файлы, предполагается, что внутри контроллера может быть только один каталог. Итак, если у вас есть controllers/d1/file.php вы в порядке, но если у вас есть controllers/d1/d2/file.php он не будет работать с поведением CI по умолчанию.

Для того, чтобы сделать его работу, которую вы, возможно, придется переопределить Router class и fetch_directory функции или _validate_request функция может быть.

  • 0
    Там нет каталогов. Все «каталоги» после /prodotto/ передаются в качестве параметров в функцию prodotto prodotto() , это то, что делает codeigniter. Так, например, если у вас есть URL-адрес, такой как /dir1/dir2/dir3/..../dirn/ CI получит доступ к классу Dir1 , вызовите функцию dir2 и передайте параметры /dir3/.../dirn/ в эта функция
  • 0
    хорошо, я понял вашу точку зрения Может быть, вы можете попробовать удалить {1} . Может быть, CI не поддерживает этот тип регулярных выражений в маршруте. Точно не уверен.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню