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