Требуется помощь правил маршрутизации CodeIgniter, CI версии 2.0 - PullRequest
0 голосов
/ 01 декабря 2011

Мне нужно следующее поведение:

  1. http://www.example.com/ Должен перейти к: http://example.com/welcome

    (DONE BY установил default_controller в rout.php)

  2. http://www.example.com/controllerName/functionName Должен перейти к controllerName, а затем к его функции, ЕСЛИ КОНТРОЛЛЕР СУЩЕСТВУЕТ.
  3. Если controllerName не существует, он должен перейти к: specialControllerи специальная функция с functionaName в качестве параметра

например.http://www.example.com/greatProducts должно стать http://www.example.com/specialController/specialFunction/greatProducts, если контроллер greatProducts не существует, (это может быть любая строка, а не только greatProduct, случай такой же, то есть контроллер с таким именем не существует)

Желательно бы реализовать это с использованием правил маршрутизации, изменение сегментов URI путем редактирования библиотек не кажется мне хорошим вариантом.

ЭТО РАБОТАЕТ:

Я попробовал этоотредактировав Routes.php в core / Routes.php и добавив что-то вроде

`$segments = array("specialController","specialFunction",$segments[0]);
        return $segments;`

, если было обнаружено, что контроллер не существует.

1 Ответ

3 голосов
/ 01 декабря 2011

Попробуйте это (еще не проверено, но должно работать):

 $route['greatPtroduct/(:any)'] = "specialController/specialFunction/$1";

Контроллер:

class specialController extends CI_Controller {

  function specialFunction($method)
  {
     if(method_exists($this,$method))
     {
       $this->$method;
     }
     else
     {
      show_404;
     }
  }

UPDATE:

это более сложно. Маршрут как

$route['(:any)/(:any)'] = "specialController/specialFunction/$1";

будет работать, но он будет ловить ЛЮБОЙ контроллер, поэтому, если у вас есть другие в вашем приложении, вам нужно добавить их в белый список, чтобы избежать этого. Пример:

$route['contact'] = "contact";
$route['about'] = "about";
// and so on
$route['(:any)/(:any)'] = "specialController/specialFunction/$1";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...