2012-01-15 3 views
0

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

У меня разные пучки, такие как «ArtistBundle», «UserBundle», «AlbumBundle» и т. Д. Поскольку информация, связанная с пользователем, не имеет ничего общего с ArtistBundle («разделение проблем»), я хочу получить информацию от UserBundle.

Прямо сейчас я вижу только два способа сделать это:

<?php 
namespace Acme/ArtistBundle/Controller; 
use Acme/UserBundle/User 

public function indexAction() 
{ 
    ... 
    $user = new User($userId); 
    $collectionInfo = $user->checkArtistAlbums($artistId); 
    ... 
} 

Это решение может работать, но это делает модульные тесты сложнее, так как я не использую инъекции зависимостей (что было бы правильным способом я думаю) ,

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

Так что же было бы «лучшей практикой» здесь? Определение службы UserBundle? Как-то настроить ArtistBundle, чтобы объект UserBundle был установлен при построении объекта?

ответ

1

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

Но пучки все еще разделены. Поэтому, даже если вы считаете, что это не разделено, потому что вы объединяете вещи в действие вашего контроллера, дело противоположное.

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

0

По-моему, я бы создал myProjectBundle. Затем вы создаете папку Entity и там создаете альбомы альбомов и пользовательские папки. Внутри вы создаете Доктрину для каждой таблицы (альбом, atrtis, пользователь).

Что бы я хотел сделать, это вызов службы (создать служебную папку и класс обслуживания) в моем контроллере (loginAction), который доставит требуемую информацию (получите все альбомы и исполнителей для текущего пользователя). Затем используйте шаблон для рисования страницы входа и используйте другой шаблон для отображения остальной информации.

+0

Я не согласен с тем, чтобы все было в одном родовом комплекте. Это нарушает разделение проблем. –