Ну, у вас есть несколько вариантов:
Оставьте вещи такими, какие они есть, и не беспокойтесь о "нарушении правил". Скорее всего, вы обнаружите, что в конечном итоге вам понадобится совсем другая кодовая база для вашей панели администратора / управления, чем для внешнего интерфейса - поэтому дублирование становится не проблемой, когда вы в конечном итоге пишете другой код.
Объедините оба приложения в одно. Это решает проблему дублирования, но заставляет других, таких как необходимость балансировать каждую библиотеку или помощника, для правильной работы в обеих средах. Мой опыт с этим более подробно описан здесь , и здесь есть пост в блоге от разработчика CI Фила Стерджена, который подводит итог, как реализовать эту практику здесь: http://philsturgeon.co.uk/blog/2009/07/Create-an-Admin-panel-with-CodeIgniter
Это тот, который я не использовал, но выглядит многообещающе: пакеты.
Приложение "Пакеты"
Пакет приложений позволяет легко распространять полный
наборы ресурсов в одном каталоге, в комплекте с его собственным
библиотеки, модели, помощники, конфигурационные и языковые файлы. это
Рекомендуется поместить эти пакеты в
папка application / third_party.
Независимо от рекомендации использовать каталог /third_party
, этот может быть любым каталогом, который вы выберете.
Ниже приведен пример каталога для пакета приложения.
названный "Foo Bar". / Приложение / THIRD_PARTY / foo_bar
config/
helpers/
language/
libraries/
models/
Независимо от цели пакета приложений "Foo Bar", он имеет свои
собственные файлы конфигурации, помощники, языковые файлы, библиотеки и модели. к
использовать эти ресурсы в ваших контроллерах, вы должны сначала сказать
Загрузчик, который вы собираетесь загружать ресурсы из пакета, путем
добавив путь к пакету. $this->load->add_package_path()
Добавление пути к пакету указывает классу Loader, что перед ним стоит
путь для последующих запросов ресурсов. Как пример, "Foo
Пакет приложения "Bar" выше имеет библиотеку с именем Foo_bar.php. В нашем
контроллер, мы бы сделали следующее:
$this->load->add_package_path(APPPATH.'third_party/foo_bar/');
$this->load->library('foo_bar');
Полные детали поясняются в документации к погрузчику: http://codeigniter.com/user_guide/libraries/loader.html
И еще раз, вот еще один пост Фила Стерджена об этом, который может помочь вам понять, как это работает: http://philsturgeon.co.uk/blog/2010/04/codeigniter-packages-modules
Идея заключается в том, что у вас будет третья папка "application" (ваш "пакет"), которая будет использоваться в качестве запасного варианта для загрузки ресурсов, позволяя при этом переопределить файл путем сопоставляя одно с любым другим приложением, вы получаете преимущество общих ресурсов с возможностью их переопределения *.
* Это предположение, на которое я нахожусь при чтении документов, я не проверял это, поэтому может быть что-то еще.
Возможно, вы захотите поместить каталог пакета рядом с двумя другими папками приложения и ссылаться на него в MY_Controller::__construct()
, например:
$this->load->add_package_path(FCPATH.'my_package_name/');
Я еще не использовал пакеты, но после написания этого поста - мне очень хочется проверить его для моего следующего проекта.