Например, пишите какого-то вида контроллер/модель, который практически не отличается от раза к разу
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array('news'));
$resolver->setDefaults(array(
'multiple' => true,
'required' => false,
'class' => 'QFilesBundle:File',
'query_builder' => function (Options $options) {
return function(EntityRepository $er) use ($options) {
$news = $options['news'];
$qb = $er->createQueryBuilder('r');
// ваш код
return $qb;
};
},
));
}
$builder->add('files', 'files', array(
'news' => $news
));
б) Нет, конечно. Создайте провайдер, зарегистрируйте его и используйте везде.