CodeIgniter: лучший способ реализовать внешние объекты (объекты, которые не являются моделями, представлениями или контроллерами)? - PullRequest
3 голосов
/ 05 марта 2010

Я хочу добавить в проект CodeIgniter несколько классов, которые не являются моделями, представлениями или контроллерами.Скорее всего, они будут встроены в модели / контроллеры и используются различными способами.Где мне хранить эти классы, и как лучше всего реализовать их в CodeIgniter?(Или, в более общем случае, любая основанная на MVC инфраструктура?).

РЕДАКТИРОВАТЬ: просматривая некоторую документацию codeIgniter, похоже, что добавление объектов к помощнику - это путь, верно?

Ответы [ 3 ]

9 голосов
/ 05 марта 2010

CI отличается от многих сред MVC тем, что он не затрудняет интеграцию с внешними библиотеками. Как правило, есть пара подходов:

  1. Просто включите () / require () библиотеку и используйте ее как обычно. Это прекрасно работает большую часть времени, если нет конфликта имен. CI в основном остается в стороне, так что это не распространено. В этом случае вы можете разместить библиотеку там, где захотите. Обычно я стараюсь хранить их в общей папке "libs" вне корня документа, поскольку не предполагаю, что они будут использоваться только CI.

  2. Поместите свои библиотеки в свои приложения / библиотеки и загрузите их, используя метод CI-> load (). Это накладывает некоторые ограничения на соглашения об именах, поэтому вам может понадобиться поменять существующие библиотеки или написать какой-нибудь конструктор-обертку. Документы CI по созданию библиотек достаточно хорошо это описывают.

Лично я предпочитаю первый подход. Это одно из преимуществ использования CI.

2 голосов
/ 05 марта 2010

Лично, если нет возможности того, чтобы она была библиотекой, я либо помещу ее в папку помощников как objects_helper.php, либо, в особых случаях, в тот же файл, что и объект библиотеки, который ее вызывает.

Вы также можете заглянуть в библиотеку фабрики объектов, чтобы вы могли использовать что-то вроде:

$this->factory->createUserObject( $name, $rank, $serial );

Наконец, вы можете заглянуть в структуру hooks, но она не похожа на вас действительно хочу использовать это.Я хотел бы использовать require / include, если вы чувствуете, что это не имеет смысла (с точки зрения кода / философии) ни в каких других обстоятельствах.Как правило, рекомендуется по возможности работать внутри фреймворка.

1 голос
/ 05 марта 2010

Я бы порекомендовал сделать его библиотекой и просто использовать $ this-> load-> library (); Чтобы узнать больше см. http://codeigniter.com/user_guide/general/creating_libraries.html

Существует разница между библиотеками и помощниками. Если внешняя библиотека не является объектно-ориентированной, то вы захотите использовать ее в качестве помощника, если она есть, тогда вы просто должны сделать ее библиотекой без проблем.

...