Лично я обнаружил, что классы репозитория немного раздуваются в приложениях небольшого и среднего размера. Не уверен, каков ваш подход, но большинство всего, что я прочитал (и что я использовал в недавнем приложении Doctrine 2), было иметь слой «обслуживания», который манипулировал сущностями. Это b / c в D2, реализация сохранения / удаления и т. Д. В сущностях подрывает цель системы, которая заключается в том, чтобы облегчить знание постоянства от сущностей и рассматривать их как простые старые объекты Php (TM);)
Что мне показалось странным в вашем запросе, так это передача идентификатора первичного ключа и идентификатора пользователя для выборки пользователя. Мне кажется, что pk таблицы User будет идентификатором пользователя, или, по крайней мере, если идентификатор пользователя не является pk (не уверен, почему это так), вы сможете получить записи с помощью только рк. Вот метод получения объекта User в моей системе
/**
* @param int $iId user id
*
* @return object
*/
public function fetch($iId)
{
return $this->_oEm->find('AwesomeApp\Entity\User', $iId);
}
Текущая функция пользователя, которую вы ищете, должна быть связана с сеансом в вашем приложении. В zf я создал обработчик сеанса, который сохраняет объект User доктрины в хранилище сеансов, затем, когда сеанс читается, я повторно присоединяю объект User к Entity Manager. Вероятно, вы захотите сделать что-то подобное в sf, тогда вызов getCurrentUser вернет тот же объект User, что и его извлечение из базы данных. Хранение объекта User в сеансе исключает необходимость возвращаться к нему в базу данных при каждой загрузке страницы, например, если вы только что сохранили идентификатор пользователя в сеансе.
В конце дня вы «должны» помещать сложные запросы на выборку в репозитории, но, очевидно, это остается на усмотрение пользователя, когда дело доходит до лучших практик. В этом случае, когда у вас есть только ПК, я бы сказал, что нет смысла писать класс репозитория.