Подтвердить что ты не робот

Лучшая практика в CakePHP для сохранения данных с использованием моделей в компоненте

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

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

По моему мнению, DRY - это критический путь. Для этого я вижу два варианта:

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

Если дело доходит до трудного выбора, я бы ошибался, сохраняя мое приложение DRY, а не поддерживая строгую дисциплину MVC.

Ответ 3

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

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

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

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

Как вы думаете?

Ответ 4

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