Что корректное место состоит в том, чтобы совместно использовать прикладную логику в CakePHP?

Я предполагаю, что простой ответ на вопрос был бы компонентом.

Хотя я соглашаюсь, я чувствую себя странным, имея необходимость записать компонент для чего-то настолько определенного.

Например, скажем, у меня есть таблица пользователей. Когда пользователь создается, это должно сформировать цепную реакцию событий, различные виды инициирования данных, связанных с пользователем все вокруг базы данных. Я полагал, что будет лучше постараться не непосредственно управлять базой данных от различных контроллеров и вместо этого упаковывать все это аккуратно в методе. Однако, так как к некоторой логике нужно получить доступ отдельно, у меня действительно не может быть целого пакета в отдельном методе. Вместо этого я думал, что будет логично повредить его до мелких кусочков (как $userModelOrController->createNew() и $candyStorageModelOrController->createNew()) то единственное взаимодействует с их соответствующей таблицей базы данных.

Теперь, если логика помещается в модель, она работает отлично, пока я не должен использовать другие модели. Конечно, это возможно, но по сравнению с загружающимися моделями в контроллере, дело не в этом простой. Это похоже на разработчика Пирога, говорящего мне "Несомненно, Возможно, если бы Вы хотите сделать это тот путь, но это не то, как я сделал бы это".

Затем если логика помещается в контроллер, я могу получить доступ к другим моделям, действительно легким через $this->loadModel(), но это возвращает меня ранее объясненной ситуации, так как я должен смочь продолжить цепную реакцию неограниченно долго. Доступ к другим контроллерам от контроллера возможен, но снова, кажется, нет никакого прямого способа сделать так, таким образом, я предполагаю, что все еще не делаю его правильно.

При помощи компонента эта проблема могла быть решена легко, так как компоненты доступны каждому контроллеру, который я хочу. Но как я записал вначале, это чувствует себя неловким для создания компонента специально для этой задачи. Мне компоненты больше походят на пакеты дополнительной функциональности (как базовые компоненты) и не что-то для совместного использования определенной для контроллера логики.

Так как я плохо знаком с этой целой вещью MVC, я, возможно, полностью неправильно понял понятие. Еще раз я был бы благодарен, если бы кто-то указал на меня на правильное направление :)

6
задан jpeltoniemi 17 June 2010 в 19:20
поделиться

4 ответа

Очень раздражает, что CakePHP не поддерживает простой

  • доступ к другой модели из модели
  • доступ к компоненту из модели
  • доступ к любой модели из компонента
  • наличие функции, доступной как из контроллеров, так и из представлений (что-то между компонентами и хелперами), или доступ к компоненту из хелпера (или vica-versa)

Я в основном закончил тем, что добавил функцию в суперкласс AppController.

0
ответ дан 17 December 2019 в 18:10
поделиться

Это четко указано в кулинарной книге : «Компоненты - это пакеты логики, которые используются контроллерами совместно. функциональность в компоненте. "

0
ответ дан 17 December 2019 в 18:10
поделиться

Вы можете использовать AppModel, если хотите, чтобы ваши модели разделяли некоторую логику. Если вам нужно получить доступ к различным моделям в вашей модели, вы можете использовать App :: import () или ClassRegistry :: init . Теперь, если вы хотите, чтобы логика была доступна только для некоторых моделей по вашему выбору, вы можете использовать Behavior или создать другую AppModel, в которой будут наследоваться только выбранные вами модели.

0
ответ дан 17 December 2019 в 18:10
поделиться

Вероятно, лучший способ реализовать это - внутри плагина. Плагины позволяют вам инкапсулировать всю функциональность во всех частях MVC в пакет, который можно вставить в любом месте вашего кода с помощью вспомогательных функций, компонентов, поведения плагина.Таким образом,

  • вы можете разместить функциональные возможности там, где они наиболее подходят,
  • логика хранится отдельно от остальной логики вашего приложения, и
  • вы можете включать / отключать эту функциональность по мере необходимости.
0
ответ дан 17 December 2019 в 18:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: