2013-09-19 5 views
0

Я пытаюсь CodeIgnitor 2.1.4. У меня уже есть контроллер для отображения статических страниц, которые я создал с помощью учебника в документации CodeIgnitor. мои маршруты позже я настройки следующим образом:CodeIgnitor - Застрял с маршрутами

// <http://localhost/> refers to <http://localhost/pages/view/> 
    $route['default_controller'] = "pages/view"; 
// <http://localhost/somepage/> refers to <http://localhost/pages/view/somepage/> 
    $route['(:any)'] = "pages/view/$1"; 
// .htaccess is already setup to rewrite the url without index.php 

Теперь у меня нет большого опыта работы с PHP, и понятия URL Переписывая и MVC архитектуры довольно ново для меня.

Предположим, что есть страницы под названием • Главная, • О, • Администратор и • Контакт.

Для страниц • дома, • О и • контакта, Pages контроллер работает сразу, как это должно быть.

Но для • Страница администратора, я хочу иметь отдельный контроллер, который определяет, вошел ли пользователь в систему или нет, и имеет ли он права администратора и т. Д. И если он еще не вошел в систему, я должен загрузить вид вместо Администратор вид.

Страницы Контроллер имеет довольно простую логику. Он проверяет, существует ли строка в аргументе, добавленная с .php и добавленная с помощью каталога представлений, в виде файла или нет. Если это не show_404(), если это так, загрузите вид header-template, затем загрузите страницу, затем загрузите вид footer-templat. Я почти уверен, что большинство из вас, кто работал с CodeIgniter, должны увидеть аналогичную логику для статических страниц.

я мог сделать redirect('login') внутри моей Администратор вид, но это не похоже на работу. Если я создам отдельный контроллер для администратора, как бы мне получить к нему доступ, тогда как в соответствии с маршрутами каждый URL-адрес будет перенаправлен на контроллер pages/view (строка №4 в приведенном выше коде).

Как я уже сказал, я довольно новичок в этом. Это может быть какая-то заторможенная ошибка, которую я делаю. Или вся моя структура MVC может быть неправильно построена. Как мне пройти мимо этого и начать беспокоиться об аутентификации? Может ли кто-нибудь посоветовать?

ответ

2
$route['default_controller'] = "pages/view"; 
$route['admin/(:any)'] = "admin/$1"; //(admin controller) with "any" method 
$route['(:any)'] = "pages/view/$1"; 

localhost/poject/admin/edit как пример

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

Обратите внимание, что маршруты зависят от порядка и если один (первый) используется, второй игнорируется. «Маршруты будут выполняться в том порядке, в котором они определены. Более высокие маршруты всегда будут иметь приоритет над более низкими».

Для аутентификации ознакомьтесь с этим post.

Я бы предпочел использовать _remap() и extend CI_Controller, чтобы взять на себя мои маршруты вместо этого маршрута $route['(:any)'] = "pages/view/$1"; в routes.php.

remapping

+0

Я собирался ответить на свой вопрос. Я решил, что лучший способ - это то, что вы упомянули. У меня теперь есть задание '$ route' для каждой страницы;). Если это * о *, * contact * или * home *, маршрут - 'pages/view/$ 1', но если это * admin *, маршрут будет' admin/index/$ 1'. Но это, вероятно, не самый эффективный способ. Я буду использовать несколько разных логик в соответствии с вашими стратегиями * first-route-first * и * _remap() '*. :) –

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