2014-08-30 3 views
0

У меня возникли проблемы с дизайном программного обеспечения. Я хочу создать связь между контроллером, компонентом, представлением и помощником. Я имею эти модели Aricle, Product, List. И в содержании Article и Product есть списки тегов в форме [LIST=1].Как создать связь между контроллером, компонентом, представлением и помощником

Поэтому я хотел бы сделать эти списки и вставить их в контент вместо тегов. Я думал, что хорошая идея будет ListRendererHelper, которая будет отображать списки внутри View вот так $this->ListRenderer->renderList($listId). И было бы неплохо, если бы я перечислил идентификаторы в базе данных, но я должен получить их из контента. И это не очень хорошая практика, чтобы манипулировать объектами внутри View и не вставлять много кода PHP в View.

Так что я считаю, что лучшее место для управления контентом - Controller, и здесь получают списки идентификаторов. Но я не должен использовать Helper в Controller, поэтому я думаю, что должен сделать Component для Controller. И вот моя проблема, потому что мне придется писать код визуализации дважды в Component и в Helper, который против DRY. Другое решение - позвонить Helper внутри Component, но это тоже будет провал MVC. Итак, у кого есть идея, как его создать?

ответ

1

Манипулирование данными в контроллере и визуализация кода в компоненте? Вызов помощника внутри компонента? Что за...? Откуда у вас были эти простые неправильные идеи? Вы поняли, что MVC полностью ошибается.

Вы хотите модельный метод для получения данных или для управления данными. Все выборки и манипуляции данными должны выполняться на уровне модели.

MyModel::getSomeFancyData($arg1, $arg2); 
MyModel::manipulateMyFancyData($data); 

Контроллер просто передает данные вместе с представлением. Контроллеры должны быть как можно более тонкими.

$this->set('fancyData', $this->Model->getSomeFancyData()); 

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

Я предлагаю вам прочитать об основах MVC и CakePHP:

Это не относится к CakePHP, вы не будете иметь выгоду от любая структура, если вы не можете применять к ним базовые понятия, такие как MVC.

+0

Я знаю эти принципы, но я в замешательстве. Могу ли я использовать не связанную модель внутри другой модели? –

+0

И каков наилучший способ визуализации элемента() внутри помощника? –

+0

ClassRegistry :: init() для загрузки другой модели. Используя класс представления: $ this -> _ View-> element() в помощнике; Если вы знаете принципы, почему вы запрашиваете нарушения MVC, например, используя помощники в компонентах? – burzum

Смежные вопросы