2017-08-17 3 views
1

私はSonata Admin Bundleを初めて使用しています。Sonata Admin Bundle:エンティティの作成時に空のエンティティ参照が例外をスローする

namespace AppBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\ORM\Mapping\Id; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Table(name="student_course") 
* @ORM\Entity(repositoryClass="AppBundle\Repository\StudentCourseRepository") 
* 
* Class StudentCourse 
*/ 
class StudentCourse 
{ 
    /** 
    * @Id 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Student", inversedBy="studentCourses") 
    * @Assert\NotBlank() 
    */ 
    private $student; 
    /** 
    * @Id 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Course", inversedBy="studentCourses") 
    * @Assert\NotBlank() 
    */ 
    private $course; 

    /** 
    * @ORM\Column(type="datetime") 
    * @Assert\NotBlank() 
    */ 
    private $startedAt; 


    /** 
    * @return mixed 
    */ 
    public function getStartedAt() 
    { 
     return $this->startedAt; 
    } 

    /** 
    * @param mixed $startedAt 
    */ 
    public function setStartedAt($startedAt) 
    { 
     $this->startedAt = $startedAt; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getStudent() { 
     return $this->student; 
    } 

    /** 
    * @param mixed $student 
    */ 
    public function setStudent($student) { 
     $this->student = $student; 
    } 

    /** 
    * @return mixed 
    */ 
    public function getCourse() { 
     return $this->course; 
    } 

    /** 
    * @param mixed $course 
    */ 
    public function setCourse($course) { 
     $this->course = $course; 
    } 
} 

そしてStudentCourseAdmin

サービスで
namespace AppBundle\Admin; 

use AppBundle\Entity\Course; 
use AppBundle\Entity\Student; 
use Sonata\AdminBundle\Admin\AbstractAdmin; 
use Sonata\AdminBundle\Datagrid\DatagridMapper; 
use Sonata\AdminBundle\Datagrid\ListMapper; 
use Sonata\AdminBundle\Form\FormMapper; 
use Sonata\CoreBundle\Validator\ErrorElement; 

class StudentCourseAdmin extends AbstractAdmin 
{ 
    protected function configureFormFields(FormMapper $formMapper) 
    { 
     $formMapper->add('student', 'entity', [ 
      'class' => Student::class, 
      'choice_label' => 'lastName', 
      'required' => true, 
     ]); 
     $formMapper->add('course', 'entity', [ 
      'class' => Course::class, 
      'choice_label' => 'name', 
      'required' => true, 
     ]); 
     $formMapper->add('startedAt', 'date', [ 
      'required' => true, 
     ]); 
    } 

    protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
    { 
     //$datagridMapper->add('student'); 
     //$datagridMapper->add('course'); 
    } 

    protected function configureListFields(ListMapper $listMapper) 
    { 
     $listMapper->add('student'); 
     $listMapper->add('course'); 
     $listMapper->add('startedAt'); 
    } 

    /** 
    * {@inheritdoc} 
    */ 
    public function validate(ErrorElement $errorElement, $object) 
    { 
     $errorElement 
      ->with('student') 
       ->assertNotBlank() 
       ->assertNotNull() 
      ->end() 
      ->with('course') 
       ->assertNotBlank() 
       ->assertNotNull() 
      ->end(); 

    } 
} 

:私は、エンティティStudentCourseを持って

app.admin.student_course: 
    class: AppBundle\Admin\StudentCourseAdmin 
    arguments: [~, AppBundle\Entity\StudentCourse, ~] 
    tags: 
     - { name: sonata.admin, manager_type: orm, label: StudentCourse } 
    public: true 

利用可能なCourse sがありません。私がエンティティStudentCourseを空のCourseフィールドで作成しようとすると、例外が発生します。私は何かが分からないのですが、残念な例外です。この状況をよりうまく処理するにはどうすればよいでしょうか?

私はSymfony 3.3.6とSonata Admin Bundle 3.21.0を使用しています。

私は取得しています例外はある:CRUD::base_edit_form.html 「SonataAdminBundleに

例外はテンプレート ( "Course_IDに:未定義のインデックスお知らせ")のレンダリング中にスローされました。小枝"。

答えて

0

なぜManyToManyで処理できるもののエンティティを作成したのかわかりません。おそらく、そのここにあなたの問題:

/** 
* @Id 
* @ORM\ManyToOne(targetEntity="AppBundle\Entity\Course", inversedBy="studentCourses") 
*** @Assert\NotBlank()** <---- here !!! 
*/ 
private $course; 

はこれを試してみてください:

/** 
    * @Id 
    * @ORM\ManyToOne(targetEntity="AppBundle\Entity\Course", inversedBy="studentCourses") 
    * @ORM\JoinColumn(name="course_id", referencedColumnName="id", nullable= true) 
    */ 
    private $course; 

をあなたがして、コンソールでスキーマを更新する必要があり、その後:あなたはおそらくたいが取ると思い

php bin/console doctrine:schema:update --force 

これを見てください: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html

関連する問題