Я предполагаю, что простой ответ на вопрос был бы компонентом.
Хотя я соглашаюсь, я чувствую себя странным, имея необходимость записать компонент для чего-то настолько определенного.
Например, скажем, у меня есть таблица пользователей. Когда пользователь создается, это должно сформировать цепную реакцию событий, различные виды инициирования данных, связанных с пользователем все вокруг базы данных. Я полагал, что будет лучше постараться не непосредственно управлять базой данных от различных контроллеров и вместо этого упаковывать все это аккуратно в методе. Однако, так как к некоторой логике нужно получить доступ отдельно, у меня действительно не может быть целого пакета в отдельном методе. Вместо этого я думал, что будет логично повредить его до мелких кусочков (как $userModelOrController->createNew()
и $candyStorageModelOrController->createNew())
то единственное взаимодействует с их соответствующей таблицей базы данных.
Теперь, если логика помещается в модель, она работает отлично, пока я не должен использовать другие модели. Конечно, это возможно, но по сравнению с загружающимися моделями в контроллере, дело не в этом простой. Это похоже на разработчика Пирога, говорящего мне "Несомненно, Возможно, если бы Вы хотите сделать это тот путь, но это не то, как я сделал бы это".
Затем если логика помещается в контроллер, я могу получить доступ к другим моделям, действительно легким через $this->loadModel()
, но это возвращает меня ранее объясненной ситуации, так как я должен смочь продолжить цепную реакцию неограниченно долго. Доступ к другим контроллерам от контроллера возможен, но снова, кажется, нет никакого прямого способа сделать так, таким образом, я предполагаю, что все еще не делаю его правильно.
При помощи компонента эта проблема могла быть решена легко, так как компоненты доступны каждому контроллеру, который я хочу. Но как я записал вначале, это чувствует себя неловким для создания компонента специально для этой задачи. Мне компоненты больше походят на пакеты дополнительной функциональности (как базовые компоненты) и не что-то для совместного использования определенной для контроллера логики.
Так как я плохо знаком с этой целой вещью MVC, я, возможно, полностью неправильно понял понятие. Еще раз я был бы благодарен, если бы кто-то указал на меня на правильное направление :)
Очень раздражает, что CakePHP не поддерживает простой
Я в основном закончил тем, что добавил функцию в суперкласс AppController.
Это четко указано в кулинарной книге : «Компоненты - это пакеты логики, которые используются контроллерами совместно. функциональность в компоненте. "
Вы можете использовать AppModel, если хотите, чтобы ваши модели разделяли некоторую логику. Если вам нужно получить доступ к различным моделям в вашей модели, вы можете использовать App :: import ()
или ClassRegistry :: init
. Теперь, если вы хотите, чтобы логика была доступна только для некоторых моделей по вашему выбору, вы можете использовать Behavior
или создать другую AppModel, в которой будут наследоваться только выбранные вами модели.
Вероятно, лучший способ реализовать это - внутри плагина. Плагины позволяют вам инкапсулировать всю функциональность во всех частях MVC в пакет, который можно вставить в любом месте вашего кода с помощью вспомогательных функций, компонентов, поведения плагина.Таким образом,