Лучшая практика в CakePHP для сохранения данных с использованием моделей в компоненте
Я пишу компонент Cake, и кажется, что я использую его для сохранения данных, а не для этого в контроллере. В руководстве говорится, что использование моделей в компоненте не рекомендуется, но другой способ сделать это означал бы повторение кода в контроллере.
Компонент в основном анализирует нагрузку данных из разных источников и затем вставляет данные для различных моделей.
Ответы
Ответ 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 с другого контроллера. По-видимому, это также плохая практика, но они обеспечивают функцию по понятным причинам. Я использовал это в некоторых ситуациях, но у меня были отрывочные результаты при попытке передать данные взад и вперед. Я бы не использовал этот метод, кроме простых функций.