Я только начинаю работать с CodeIgniter и пытаюсь хэшировать свои обычные модули / функции, чтобы они правильно работали в рамках MVC. У меня есть несколько конкретных вопросов для тех, кто имеет большой опыт работы с CodeIgniter:
СЕССИИ
Сеанс CodeIgniter хранит данные сеанса на стороне клиента в файле cookie, который для меня просто не сработает. Я знаю, что для него есть несколько замен, или я мог бы создать свою собственную библиотеку / помощника; но я просто не вижу никакой пользы от простого использования $_SESSION.
Если я просто буду использовать $_SESSION, возникнут ли у меня проблемы с остальной частью фреймворка? Зависит ли какая-либо другая часть фреймворка от использования сеанса CodeIgniter?
Мне немного странно выходить за рамки чего-то столь простого, но мне вполне комфортно работать с простым PHP. В основном я просто хочу использовать CodeIgniter для MVC и обеспечить более модульный аспект для своих проектов.
ПОТОК КОДА И КОНФИГУРАЦИЯ
У меня есть несколько элементов конфигурации, которые нужно сделать раньше, чем что-либо еще.
Например, скажем, у меня есть константа APP_LIVE, для которой установлено значение true / false в зависимости от имени текущего сервера. Это должно произойти очень рано, так как на его основе будут установлены пути, отчеты об ошибках, система CodeIgniter, папки приложений и т. д.
Проблема в том, что system_folder и application_folder (которые будут установлены в зависимости от того, на каком сервере выполняется код) устанавливаются в первую очередь в файле index.php, до того, как будет загружена какая-либо из конфигураций.
Кроме того, у меня есть функции, которые проверяют что-то в URL-адресе и могут перенаправлять до загрузки страницы. Например, на некоторых страницах необходимо предусмотреть наличие www. в URL-адресе (для SEO), отслеживать аффилированных лиц, источники посетителей, маркетинговые флаги и т. д.
Где лучше всего складывать такие вещи, которые должны произойти очень рано? Я знаю, что есть файл конфигурации, файл автозагрузки, файл констант и т. д., Но это уже слишком поздно для некоторых элементов. Это плохая практика - просто помещать эти вещи в верхнюю часть основного файла index.php или включать их в глобальный файл конфигурации? Опять же, я чувствую, что выхожу за рамки, и задаюсь вопросом, делаю ли я это просто потому, что у меня еще нет четкого понимания этого?
ПЛАН / ПОДГОТОВКА КНИГИ
Как и у большинства людей, у меня есть верхний колонтитул, навигация, нижний колонтитул и т. д. Я привык просто хранить их в файлах, которые включены в мой шаблон страницы. Я считаю, что могу сделать то же самое, просто сделав их просмотры и включив их в свой просмотр главной страницы. Это лучший способ пойти? Некоторым из них требуется немного данных; например, на какой странице они находятся для навигации и т. д. Как лучше всего управлять навигацией, общим верхним / нижним колонтитулом и т. д.?






Недавно выпущенный CI 1.7 обрабатывает сеансы в базе данных (если вы ее используете).
Однако CI спроектирован так, чтобы быть слабосвязанным, поэтому вы не должны замечать каких-либо серьезных проблем, если решите вместо этого использовать $ _SESSION.
Для вашего верхнего / нижнего колонтитула / навигации вы можете создать (например) headerview.php, footerview.php и contentview.php и передавать данные своим представлениям, выполнив что-то вроде этого в контроллере:
$data['title'] = 'about us';
$data['content'] = 'hello world!';
$this->load->view('headerview', $data);
$this->load->view('contentview', $data);
$this->load->view('footerview');
В принципе, вы можете обращаться с этими представлениями точно так же, как с включенными, но с дополнительным преимуществом, заключающимся в том, что вы можете изменять переменные внутри. Я бы избегал вызова других взглядов изнутри представлений, но это мог бы быть только я.
Я сам делал добавления в index.php один или два раза, чтобы установить начальные значения и тому подобное, и у меня никогда не было проблем с этим.
Поздравляем с выбором фреймворка; Я уверен, ты не разочаруешься. ;)
У вас может быть несколько строк load-> view в каждом контроллере, но я лично считаю, что это связано. Я настоятельно рекомендую вам взглянуть на хуки в CodeIgniter, где вы можете определить функции, которые будут автоматически запускаться после каждого контроллера / метода (прекрасный пример АОП).
На самом деле массив $ _SESSION, кажется, не установлен, поэтому вы не можете использовать собственные сеансы PHP (по крайней мере, на 1.7). Однако в вики CodeIgniter есть класс сеанса, который использует собственные сеансы php - вы можете использовать его так же, как и другие, но он сохраняет только session_id в файле cookie. Вот: http://codeigniter.com/wiki/Native_session/
Привет - Спасибо за это. Ты уверен? Кажется, что $ _SESSION нормально работает на сервере разработки, но мне не хотелось бы видеть, как он внезапно исчезнет в один прекрасный день. Мы используем 1.7.0.
Привет, на самом деле я только начал использовать CI, и я ни в чем не уверен: P Может быть, мне что-то не хватает какой-то настройки конфигурации ... Но я также использую реализацию из ссылки и пока довольно happy - также поддерживает функцию flashdata. Думаю стоит проверить. Удачи!
Спасибо! (вот еще несколько символов, так как требуется 10)
@lacho Я создал свою собственную библиотеку аутентификации на $ _SESSION. и он отлично работает на 1.7.
Я считаю, что $ _SESSION намного безопаснее, поскольку «сеансы» CI - это файлы cookie, которые хранятся на стороне клиента и классифицируются как «передаваемая пользователем информация», которой нельзя доверять.
Данные в файлах cookie зашифрованы, поэтому теоретически это безопасно (вы можете их потерять, но их нельзя изменить, если ключ не протекает).
Вы можете попробовать с родным, используя свой собственный класс сеанса
http://www.moreofless.co.uk/using-native-php-sessions-with-codeigniter/
См. этот пост о том, как структурировать макеты / представления