2014-10-05 5 views
27

Il mio problema è il seguente. Sto usando Sonata Admin con Symfony. Nella sezione Amministrazione, quando cerco di creare un'entità, non appare nulla quando si fa clic sul pulsante Aggiungi (farro "Aggiungi"):Come posso eseguire una modifica in linea all'interno di un amministratore annidato?

enter image description here

ottengo il seguente errore: Call to a member function getName() on a non-object nella console cromata

Ecco come la mia gerarchia di entità è, ho tre oggetti che sono collegati tra loro nel modo seguente:

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

Semplicemente, ho un video che avrà un titolo e questo titolo sarà tradotto. Qui sono i miei soggetti:

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

String

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

Video

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

Quindi, Ho fatto questa struttura per facilitare la modifica in SonataAdmin. Se, attraverso la dashboard dell'amministratore, voglio modificare una stringa, posso facilmente modificare una stringa e tradurla in molte lingue (questo già funziona).

Tuttavia, quando provo a farlo nell'amministratore video, sembra che non sia possibile eseguire la modifica in linea (facendo clic sul pulsante Aggiungi non funziona) dell'oggetto String.

Ecco il codice corrispondente in video classe admin:

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

Da quello che ho trovato, sembra che due forme Imbricated non è possibile? C'è un modo per aggirare questa restrizione? O forse è il mio design che non è troppo bello?

Edit1: Sembra che ci sia una patch venuta su GitHub: https://github.com/sonata-project/SonataAdminBundle/pull/1971#issuecomment-58023124

Se qualcuno sa come posso usarlo Gradirei.

+0

Basta usare 'sonata_type_model' e passare le relative opzioni per ottenere controlli migliori –

+0

Hai provato ''inline' => 'standard'' con sonata_type_collection invece di sonata_type_admin con'' inline '=>' table''? –

+0

E anche qual è il tuo StringAdmin? –

risposta

-3

hai detto che console Chrome ti dà errore:

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

Quindi questo errore non è da JavaScript?

Se errore da PHP vuol dire che quando si tenta $ oggetto-> getName() (deve in OSC \ UtilsBundle \ Controller utilizzare Ctr + f "getName()" nell'editor di file per trovare quella riga) $ oggetto non è un oggetto, perché può essere ottenuto da un array di obeject, non da un singolo oggetto. Prova ad aggiungere var_dump($object); e vedi di cosa si tratta.

0

Prova questo nella forma mapper:

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

se l'errore persiste cercare di ottenere uno sguardo alla documentazione Doctrine2: Doctrine2 One to One association mapping e quindi generare i soggetti

0

Nel codice si utilizza delete che non è un'opzione valida. Forse puoi provare 'btn_delete' => false Controlla la documentazione di tutte le opzioni valide here.

Se questo non funziona, forse sonata_type_collection è la soluzione al tuo problema. Assicurati di utilizzare l'opzione by_reference in modo corretto in base alla tua relazione.

Problemi correlati