Я работаю над унаследованным проектом CakePHP (CakePHP 1.3), и мне трудно понять, где разместить общую модель логики. Я родом из Laravel и обычно делаю класс обслуживания или фасад Laravel и использую его там, где это необходимо, но, похоже, это не Cake-способ делать вещи. (Может я не прав по этому поводу ??)
Проект использует хеш для генерации уникальных ключей базы данных. Сама хеш-функция находится в /vendors
, Существует несколько вспомогательных функций, используемых для генерации хеша, декодирования хеша и т. Д., И в настоящее время они повторяются в нескольких различных моделях. В идеале я хотел бы извлечь эти функции из одного класса и вызвать их статически из моделей, которые в них нуждаются: Hash::make($params)
, Hash::decode($hash)
и т.д. Как я могу настроить это в приложении CakePHP?
CakePHP 1.3 очень старый. Таким образом, вы в основном имеете дело с версией фреймворка, которая даже не использует пространства имен. Тем не менее, это не мешает вам использовать их. Также он больше не поддерживается официально.
Если вы называете это моделью или услугой, я не думаю, что это имеет большое значение, если вы правильно разделяете проблемы, и это то, что вам кажется важным — и это хорошо.
Просто создайте любые классы, которые вам нужны, чтобы абстрагировать свою логику в папке модели. В твоем особом случае я думаю поведение будет работать вместо того, чтобы реализовать тонну статических методов, что приводит к тесной связи. Создайте HashBehavior, чтобы получить повторно используемый код для ваших табличных объектов. На самом деле мне не нравится Laravel за всю его статичность (да, я знаю о фасадах, но все же …). Похоже, вы унаследовали какой-то кусок не очень хорошо написанного кода, удачи в рефакторинге!
Да, 1.3 — очень старый проект (как вы поняли).
Поместите ваш общий код в AppModel учебный класс