Запрос поля формы SonataAdminBundle

#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, а внутренняя сущность. 🙂