#symfony #symfony-sonata #sonata-admin
#symfony #symfony-sonata #sonata-администратор
Вопрос:
В SonataAdminBundle в классе администратора я не могу сделать OrderBy для ManyToMany поля.
Например, автор и книга. У автора может быть много книг, так же как у книги может быть много авторов. В ссылке выше написано, что я могу использовать запрос для поля формы. Таким образом, я мог бы подготовить запрос, который выбирал бы авторов и отображал их по имени. Как этим управлять? Как получить EntityManager там, чтобы создать запрос и передать его через параметр запроса?
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
->add('name','text')
->add('author', 'sonata_type_model', array('query' => ....), array('edit' => 'inline'))
;
}
Ответ №1:
Хорошо, у меня получилось:
/**
* @param SonataAdminBundleFormFormMapper $formMapper
* @return void
*/
protected function configureFormFields(FormMapper $formMapper)
{
$entity = new MyCompanyMyProjectBundleEntitySeria();
$query = $this->modelManager->getEntityManager($entity)->createQuery('SELECT s FROM MyCompanyMyProjectBundleEntitySeria s ORDER BY s.nameASC');
$formMapper
->add('title', 'text')
->add('seria', 'sonata_type_model', array('required' => true, 'query' => $query), array('edit' => 'standard'))
->add('description', 'textarea',
array('attr' => array('class' => 'tinymce'), 'required' => false))
;
}
Комментарии:
1. Будьте осторожны, с последней версией Sonata вам нужно установить аргумент в getEntityManager(), например: $this-> ModelManager-> getEntityManager(‘MyCompany MyProjectBundle Entity Seria’)-> CreateQuery(‘ВЫБЕРИТЕ s Из MyCompanyMyProjectBundle:УПОРЯДОЧИВАНИЕ серий ПО s.name ASC’);
2. Это работает с sf2.3? Я получил эту ошибку: класс не существует» в /home/marc/work/play4fun/vendor/doctrine/common/lib/Doctrine/Common/Persistence/AbstractManagerRegistry.php строка 199
3. Спасибо за
attr
. Где документация о доступных параметрах поля formMapper?
Ответ №2:
Что-нибудь изменилось в этом? используя это, я получаю сообщение «класс не существует (ошибка 500)».
Примечание: он работал еще в Symfony 2.1, но больше не в Symfony 2.2.
Комментарии:
1. У меня так работает в Symfony 2.2
$query_user = $this->modelManager->getEntityManager('ApplicationSonataUserBundleEntityUser')->createQueryBuilder() ->add('select', 'u') ->add('from', 'ApplicationSonataUserBundleEntityUser u') ->add('orderBy', 'u.username ASC'); $formMapper ->add('title',null,array('required' => true)) ->add('user', null, array('required' => true, 'query_builder' => $query_user)) ;
2. Спасибо, ваш код предоставил мне решение, что причиной этой ошибки был не ModelManager или EntityManager, а внутренняя сущность. 🙂