Лучшая практика в CakePHP для сохранения данных с использованием моделей в компоненте - PullRequest
12 голосов
/ 16 апреля 2009

Я пишу компонент Cake, и, кажется, имеет смысл использовать его для сохранения данных, а не в контроллере. В руководстве говорится, что использование моделей в компоненте не рекомендуется, но другой способ сделать это означал бы повторение кода в контроллере.

Компонент в основном анализирует загрузку данных из различных источников и затем вставляет данные для различных моделей.

Ответы [ 4 ]

24 голосов
/ 16 апреля 2009

Если компонент анализирует загрузку данных из различных источников , его, вероятно, можно записать как поведение.

Если нет, и у вас нет другого выбора, кроме как использовать модель в своем компоненте, обязательно сделайте это правильно:

$this->ModelName = ClassRegistry::init('ModelName');

Лично я не вижу проблем с этим, так как основные компоненты (такие как компонент Acl) делают это. Пока ваш компонент обрабатывает логику приложения , а модели обрабатывают data , все будет в порядке.

4 голосов
/ 16 апреля 2009

На мой взгляд, СУХОЙ - критический путь. С этой целью я вижу два варианта:

  1. Вместо сохранения данных в компоненте, верните их в контроллер в необработанном виде, который можно сохранить из контроллера.
  2. Иди и импортируй модель в компонент и делай то, что тебе нужно. Это не поощряется, но они делают это достаточно просто.

Если дело доходит до трудного выбора, я бы допустил ошибку, оставив свое приложение СУХИМЫМ, а не придерживаясь строгой дисциплины MVC.

0 голосов
/ 02 апреля 2012

С версиями Cake, с которыми я знаком (1.3, 2.0), вы можете запросить действие с другого контроллера. Это, по-видимому, также плохая практика, но они предоставляют функцию по понятным причинам. Я использовал это в некоторых ситуациях, но у меня были отрывочные результаты при попытке передать данные назад и вперед. Я бы также не использовал этот метод, за исключением простых функций.

0 голосов
/ 30 января 2010

Можно утверждать, что если вы хотите записать данные, сгенерированные в компоненте, и иметь возможность упаковать компонент для распространения, имеет смысл загрузить модель в ваш компонент (особенно, если модель является частью вашего компонента) ,

Например, у меня есть компонент AIM authorize.net (авторизация кредитной карты).

С моего контроллера я вызываю функцию зарядки компонентов. Authorize.net отправляет мне ответ (внутри компонента) и в соответствии с DRY я бы хотел сохранить данные внутри компонента, чтобы мне не приходилось повторять сохранение данных, откуда бы ни вызывалась функция начисления.

Еще одним плюсом для отказа от соглашения может быть тот факт, что я могу использовать модель из компонента и не иметь модель в приложении.

Что ты думаешь?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...