Куда должны направляться ресурсы в проекте CodeIgniter?
-
05-07-2019 - |
Вопрос
Я только начинаю с CodeIgniter, и я не уверен, куда должны идти такие вещи, как css, js и изображения.Снаружи вся системная папка кажется нормальной, но это означает, что все отдельно.Inside означает, что пути к файлам длиннее, и я беспокоюсь, что это может все испортить.Какова наилучшая практика в этом вопросе?
Решение
Обычно я помещаю отдельные папки в корневой каталог, поэтому получаю структуру каталогов, подобную этой:
/system
/css
/js
/img
Кажется, работает для меня - когда вы используете site_url(url)
, генерируемый им URL-адрес создается из корня, поэтому вы можете использовать site_url('css/file.css')
для генерации URL-адресов для ваших таблиц стилей и т. д.
Другие советы
Лично я разрываю application
каталог из system
каталог и сделайте его родственным по отношению к system
.Затем я создаю каталог проекта в public_html (www)
куда я переезжаю index.php и где храню свои государственные активы.
Давайте предположим, что проект, над которым вы работаете, называется projekt
.В родительском каталоге для public_html (www)
создайте каталог под названием CISYSTEM
, и внутри этого каталога создайте каталог из используемой вами версии, 202
, 210
и т.д.
/CISYSTEM
/202
/210
/another_CI_version
/projekt_application
/models
/views
/controllers
/private_assets
/public_html
/projekt
index.php
.htaccess
css
img
js
lib
Прелесть этой структуры каталогов в том, что она добавляет еще один уровень безопасности и упрощает обновление / замену вашего ядра CI.Кроме того, вы не должны вносить изменения в ядро - наличие единого каталога, в котором хранится ваше ядро, и наличие ссылок на него во всех проектах сохраняет все в ЧИСТОТЕ.
Однако вся эта перетасовка каталогов требует, чтобы вы перенаправили некоторые вещи.К счастью, CodeIgniter упрощает это - все изменения могут быть внесены в index.php
файл.
Открыть index.php
и перенаправьте пару вещей:
Изменение: $system_path = 'system';
Для: $system_path = '../../CISYSTEM/210';
Изменение: $application_folder = 'application';
Для: $application_folder = '../../projekt_application';
Кроме того, я вижу, что многие люди говорят об использовании site_url()
в других ответах.Я рекомендую менее подробный способ использования site_url()
...вам не нужно вызывать его каждый раз, если вы используете HTML-код <base>
элемент:
<base href="<?= site_url();?>">
Просто включите это в текст вашего приложения. <head>
и вы можете напрямую связаться со своими контроллерами...как в:
<a href='controllername/functionname'>Some Action</a>
Ваше здоровье
Я ненавижу иметь так много каталогов на корневом уровне, поэтому я использую / public и использую htaccess для перезаписи / scripts в / public / scripts и т. д.
Я считаю, что лучше всего хранить активы на корневом уровне. Вы можете использовать <?=base_url()?>
для отображения полного корня сайта. В конфигурационном файле вы настраиваете корень сайта. Это утверждение только подтверждает это.
Из-за этого вы можете использовать такие включения:
<link href="<?=base_url()?>/css/style.css" rel="stylesheet" type="text/css" />
в любом месте вашего кода, и он все равно получит http://example.com/css/style .css . р>
base_url()/css/name.css
Чтобы использовать помощник site_url (url) таким способом, вы ДОЛЖНЫ сначала настроить Apache mod_rewrite (или эквивалентный) для удаления сегмента index.php из URI.
В противном случае метод site_url добавляет index.php к URL-адресу, который, вероятно, испортит пути к вашим ресурсам, если вы поместите их в базовый каталог, как указано выше.
Вот документация CodeIgniter по удалению index.php из URI: