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