2014-10-05 12 views
27

Vấn đề của tôi là như sau. Tôi đang sử dụng Sonata Admin với Symfony. Trong phần Quản trị, khi tôi cố gắng tạo ra một thực thể, không có gì xuất hiện khi tôi bấm vào nút add (đánh vần là "Ajouter"):Tôi làm cách nào để thực hiện chỉnh sửa nội dòng bên trong quản trị viên lồng nhau?

enter image description here

tôi nhận được lỗi sau: Call to a member function getName() on a non-object trong chrome console

sau đây là cách phân cấp tổ chức của tôi là, tôi có ba đối tượng được liên kết với nhau theo cách sau:

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

Đơn giản chỉ cần, tôi có một video rằng sẽ có một tiêu đề và tiêu đề này sẽ được dịch. Dưới đây là các đơn vị của tôi:

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

Chuỗi

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

Vì vậy, Tôi đã làm cấu trúc này để tạo thuận lợi cho việc chỉnh sửa trong SonataAdmin. Nếu, thông qua bảng điều khiển quản trị, tôi muốn chỉnh sửa một Chuỗi, tôi có thể dễ dàng chỉnh sửa chuỗi và dịch nó bằng nhiều ngôn ngữ (điều này đã hoạt động).

Tuy nhiên, khi tôi cố gắng thực hiện điều đó trong quản trị viên video, có vẻ như tôi không thể chỉnh sửa nội tuyến (nhấp vào nút thêm không hoạt động) của đối tượng Chuỗi.

Dưới đây là các mã có liên quan trong lớp quản trị video:

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

Từ những gì tôi đã tìm thấy, nó trông giống như hai hình thức imbricated không thể? Có cách nào để phá vỡ hạn chế đó không? Hoặc có lẽ đó là thiết kế của tôi mà không phải là quá tốt?

Edit1: Dường như có một bản vá sắp tới trên github: https://github.com/sonata-project/SonataAdminBundle/pull/1971#issuecomment-58023124

Nếu có ai biết làm thế nào tôi có thể sử dụng nó tôi sẽ đánh giá cao.

+0

Chỉ cần sử dụng 'sonata_type_model' và chuyển các tùy chọn liên quan để có các điều khiển tốt hơn –

+0

Bạn đã thử ''inline' => 'standard'' với sonata_type_collection thay vì sonata_type_admin với'' inline '=>' table''? –

+0

Và cũng là StringAdmin của bạn là gì? –

Trả lời

-3

Bạn nói rằng chrome console cung cấp cho bạn báo lỗi:

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

Vì vậy, lỗi này không phải là từ javascript?

Nếu lỗi từ PHP có nghĩa là khi bạn thử $ object-> getName() (nó phải bằng OSC \ UtilsBundle \ Controller sử dụng Ctr + f "getName()" trong trình soạn thảo tệp để tìm dòng đó) $ object không phải là một đối tượng, mà có thể bởi vì bạn có thể nhận được mảng obeject, không phải đối tượng duy nhất. Hãy thử thêm var_dump($object); và bạn thấy nó là gì.

0

Hãy thử điều này trong các hình thức mapper:

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

Nếu lỗi vẫn tồn tại cố gắng để có được một cái nhìn tại các tài liệu Doctrine2: Doctrine2 One to One association mapping và sau đó tạo ra các đối tượng của bạn

0

Trong mã của bạn, bạn đang sử dụng delete đó không phải là một lựa chọn hợp lệ. Có thể bạn có thể thử 'btn_delete' => false Kiểm tra tài liệu cho tất cả các tùy chọn hợp lệ here.

Nếu điều này không hoạt động, có thể sonata_type_collection là giải pháp cho vấn đề của bạn. Đảm bảo rằng bạn đang sử dụng tùy chọn by_reference theo cách chính xác tùy thuộc vào mối quan hệ của bạn.

Các vấn đề liên quan