Удаление имени контроллера из URL в CodeIgniter - PullRequest
2 голосов
/ 13 апреля 2011

В настоящее время в моем проекте CI у меня есть один контроллер, который обрабатывает все учетные записи.Например: регистрация, логин, активация и т. Д.

Мои маршруты работают как таковые ...

domain.com/account/login/ или domain.com/account/register/

Как удалить account из маршрута, также собираясь удалить контроллер с других страниц.

Я хочу, чтобы контроллер всегда был удален.Одна из моих причин для этого - SEO, поисковая система оценивает назойливость страницы, основываясь на том, насколько глубоко она находится на веб-сайте.

Единственный способ, которым я могу достичь этого, - сделать что-то вроде route['activate'] = 'account/activate'; за каждую страницу, что было бы огромной проблемой.

Ответы [ 5 ]

4 голосов
/ 21 августа 2011
$route['^(?!other|controllers).*'] = “account/$0″;
2 голосов
/ 13 апреля 2011

Попробуйте это:

$route['(:any)'] = "account/$1";
1 голос
/ 13 апреля 2011

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

Вам нужно расширить Router.php с помощью application/core/MY_Router.php и переопределить метод _validate_request().Который в основном решает, является ли это действительным маршрутом или нет.

он проверяет, существует ли класс контроллера, затем завершается неудачей, если он не существует.Вам нужно заменить это некоторым кодом, который не предполагает сегмента контроллера, затем просматривает каждый из ваших контроллеров и проверяет, содержит ли он вызванный метод (это будет сегмент 1, так как контроллера нет).

Теперьхитрый момент, в этот момент жизненного цикла CI ваш контроллер, очевидно, не загружен, поэтому вы не можете проверить его, используя method_exists () .

Вам нужно загружать свои контроллеры по одному,и затем для каждого прогона

method_exists($loaded_class, $method_name)

, и если оно истинно, тогда set, затем продолжайте и вызовите:

$this->set_class('the_name_of_the_scanned_class_which_had_the_method');

Тогда CI может продолжать работать как обычно, и он загрузит вашметоды без пользователя никогда не знают, с какого контроллера он загружен.

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

1 голос
/ 13 апреля 2011

использовать mod_rewrite (если у контроллера всегда одно и то же имя)

1 голос
/ 13 апреля 2011

Ответ на ваш вопрос заключается в том, что вы ДОЛЖНЫ явно указать маршруты.

Как узнать, в каком контроллере находится данная функция ????

Вы должны сказать это.

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