Как я могу выполнить встроенное редактирование внутри вложенного администратора?

Моя проблема заключается в следующем. Я использую Sonata Admin с Symfony. В разделе «Администратор», когда я пытаюсь создать объект, при нажатии кнопки «Добавить» (пишется «Ajouter») ничего не появляется:

введите описание изображения здесь

Я получаю следующую ошибку: Call to a member function getName() on a non-object в хромированной консоли

Вот как выглядит моя иерархия объектов: у меня есть три объекта, которые связаны между собой следующим образом:

Video ---OneToOne--> String ---OneToMany--> LocalizedString

Просто у меня есть одно видео, которое будет иметь заголовок, и этот заголовок будет переведен. Вот мои сущности:

LocalizedString

OSC\UtilsBundle\Entity\LocalizedString:
type: entity
table: null
repositoryClass: OSC\UtilsBundle\Entity\LocalizedStringRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO
fields:
locale:
type: string
length: '20'
content:
type: string
length: 255

manyToOne:
parent:
targetEntity: String
mappedBy: localizedObjectslifecycleCallbacks: {  }

строка

OSC\UtilsBundle\Entity\String:
type: entity
table: null
repositoryClass: OSC\UtilsBundle\Entity\StringRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO

oneToMany:
localizedObjects:
targetEntity: LocalizedString
mappedBy: parent
cascade: ["persist", "remove"]

lifecycleCallbacks: {  }

видео

OSC\MySportBundle\Entity\Video:
type: entity
table: null
repositoryClass: OSC\MySportBundle\Entity\VideoRepository
id:
id:
type: integer
id: true
generator:
strategy: AUTO

oneToOne:
title:
targetEntity: OSC\UtilsBundle\Entity\String
cascade: ["persist", "remove"]

lifecycleCallbacks: {  }

Итак, я сделал эту структуру для облегчения редактирования в SonataAdmin. Если через панель администратора я хочу отредактировать строку, я могу легко отредактировать строку и перевести ее на многие языки (это уже работает).

Тем не менее, когда я пытаюсь сделать это в администраторе видео, кажется, что я не могу выполнить встроенное редактирование (нажатие кнопки добавления не работает) объекта String.

Вот соответствующий код в классе администратора видео:

$formMapper
->add('title', 'sonata_type_admin', array('delete' => false, 'btn_add' =>false), array(
'edit' => 'inline',
'inline' => 'table',
));

Из того, что я нашел, похоже, что две запутанные формы невозможны? Есть ли способ обойти это ограничение? Или, может быть, мой дизайн не слишком хорош?

Edit1: похоже, на github есть патч: https://github.com/sonata-project/SonataAdminBundle/pull/1971#issuecomment-58023124

Если кто-нибудь знает, как я могу его использовать, буду признателен.

31

Решение

В вашем коде вы используете delete что не является допустимым вариантом. Может быть, вы можете попробовать 'btn_delete' => false
Проверьте документацию для всех действительных вариантов Вот.

Если это не работает, возможно sonata_type_collection это решение вашей проблемы. Убедитесь, что вы используете by_reference вариант правильный путь в зависимости от ваших отношений.

1

Другие решения

Попробуйте это в форме сопоставления:

  $formMapper
->add('title', 'sonata_type_model_list', array(
'class' => 'YourBundle:String',
'required' => false,
'delete' => false,
'btn_add' =>true,
), array(
'edit' => 'inline',
'inline' => 'table',
))
;

Если ошибка не устранена, попробуйте взглянуть на документацию Doctrine2:
Doctrine2 Одно-Одно сопоставление ассоциаций а затем генерировать ваши сущности

0

Вы сказали, что консоль Chrome выдает ошибку:

Call to a member function getName() on a non-object

Значит, эта ошибка не из JavaScript?

Если ошибка в PHP, это означает, что когда вы пытаетесь $ object-> getName () (это должно быть в OSC \ UtilsBundle \ Controller, используйте Ctr + f «getName ()» в редакторе файлов, чтобы найти эту строку) $ object не является объектом Это может быть потому, что вы можете получить объект массив, а не один объект. Попробуй добавить var_dump($object); и вы видите, что это.

-3
По вопросам рекламы [email protected]