sonataadminbundle php symfony sonata-admin

php - sonataadminbundle - ¿Cómo puedo realizar una edición en línea dentro de un administrador anidado?



symfony 4 admin (3)

En su código está utilizando delete que no es una opción válida. Tal vez puedas probar ''btn_delete'' => false Consulta aquí la documentación de todas las opciones válidas.

Si esto no funciona, tal vez sonata_type_collection es la solución a su problema. Asegúrese de estar utilizando la opción by_reference la manera correcta según su relación.

Mi problema es el siguiente. Estoy usando Sonata Admin con Symfony. En la sección Admin, cuando intento crear una entidad, no aparece nada cuando hago clic en el botón Agregar (deletreado "Ajouter"):

Me sale el siguiente error: Call to a member function getName() on a non-object en la consola de Chrome

Así es como es la jerarquía de mi entidad, tengo tres objetos que están vinculados entre sí de la siguiente manera:

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

Simplemente, tengo un video que tendrá un título y este título será traducido. Aquí están mis entidades:

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: localizedObjects lifecycleCallbacks: { }

Cuerda

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: { }

Vídeo

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: { }

Entonces, hice esta estructura para facilitar la edición en SonataAdmin. Si, a través del panel de administración, quiero editar una cadena, puedo editar una cadena fácilmente y traducirla en muchos idiomas (esto ya funciona).

Sin embargo, cuando trato de hacer eso en el administrador de video, parece que no puedo hacer una edición en línea (haciendo clic en el botón Agregar no funciona) del objeto String.

Aquí está el código relevante en la clase de administración de video:

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

Por lo que he encontrado, parece que dos formas imbricadas no son posibles. ¿Hay alguna forma de eludir esa restricción? ¿O tal vez es mi diseño que no es demasiado bueno?

Edit1: Parece que hay un parche viniendo en github: https://github.com/sonata-project/SonataAdminBundle/pull/1971#issuecomment-58023124

Si alguien sabe cómo puedo usarlo, lo agradecería.


Pruebe esto en el mapeador de formularios:

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

Si el error persiste, intente consultar la documentación de Doctrine2 : mapeo de la asociación uno a uno de Doctrine2 y luego genere sus entidades


Usted dijo que la consola de Chrome le da error:

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

¿Entonces este error no es de javascript?

Si el error de PHP significa que cuando intenta $ object-> getName () (debe hacerlo en OSC / UtilsBundle / Controller use Ctr + f "getName ()" en el editor de archivos para encontrar esa línea) $ object no es un objeto , eso puede hacerlo porque tal vez obtienes matriz de obeject, no solo objeto. Pruebe agregar var_dump($object); y ves lo que es