2016-10-03 8 views
0

私はSymfony 2.8ベースのプロジェクトを持っていて、CraueFormFlowBundleで作成したフォームを用意しています。私は自分のフロークラス、各ステップの中間フォームタイプを作成しましたが、すべてがこのレベルで動作します。唯一効果的でないのは、各ステップ間かフォームフローの最後かにかかわらず、単一の検証ルールがトリガーされないことです。私はエンティティでデータを検証するために注釈を使用しています。 config.ymlで、validationformの両方のコンポーネントがenabledで、framework.validation.enable_annotationstrueに設定されていることを確認しました。ここでフォームがsymfony 2.8で妥当性検証されていません

は私のコントローラです:

public function newEvaluationAction(Classroom $classroom, Subject $subject, Period $period) 
{ 
    $evaluation = $this->getSchoolManager()->createEvaluation($classroom, $subject, $period); 

    $flow = $this->get('app.form.flow.evaluation_create'); 
    $flow->bind($evaluation); 

    $form = $flow->createForm(); 

    if ($flow->isValid($form)) { 
     $flow->saveCurrentStepData($form); 

     if ($flow->nextStep()) { 
      $form = $flow->createForm(); 
     } else { 
      $this->getSchoolManager()->persistEvaluation($evaluation); 
      $this->redirectToRoute('ec_classroom_show_subject', [ 
       'subject' => $subject->getId() 
      ]); 
     } 
    } 

    return $this->render('classrooms/subjects/evaluations/new.html.twig', [ 
     'form' => $form->createView(), 
     'flow' => $flow, 
     'classroom' => $classroom, 
     'subject' => $subject, 
     'period' => $period, 
     'evaluation' => $evaluation 
    ]); 
} 

と私のEvaluationエンティティ

<?php 

namespace AppBundle\Entity; 

use Doctrine\Common\Collections\ArrayCollection; 
use Doctrine\Common\Collections\Collection; 
use Doctrine\ORM\Mapping as ORM; 
use Symfony\Component\Validator\Constraints as Assert; 

/** 
* @ORM\Entity(
*  repositoryClass="AppBundle\Repository\EvaluationRepository" 
*) 
*/ 
class Evaluation 
{ 
    /** 
    * @var integer 
    * @ORM\Id 
    * @ORM\Column(type="integer") 
    * @ORM\GeneratedValue 
    */ 
    private $id; 

    /** 
    * @var string 
    * @ORM\Column(type="string") 
    * @Assert\NotBlank() 
    * @Assert\Length(max=255) 
    */ 
    private $label; 

    /** 
    * @var \DateTime 
    * @ORM\Column(type="date") 
    * @Assert\NotNull() 
    * @Assert\Date() 
    */ 
    private $date; 

    /** 
    * @var Collection 
    * @ORM\ManyToMany(targetEntity="Knowledge") 
    * @Assert\Count(min=1, minMessage="evaluation.knowledges.at_least_one") 
    */ 
    private $knowledges; 

    /** 
    * @var Collection|Scale[] 
    * @ORM\OneToMany(targetEntity="Scale", mappedBy="evaluation", cascade={"ALL"}) 
    * @Assert\Count(min=1, minMessage="evaluation.scales.at_least_one") 
    * @Assert\Valid(traverse=true) 
    */ 
    private $scales; 

    /** 
    * @var Subject 
    * @ORM\ManyToOne(targetEntity="Subject") 
    * @ORM\JoinColumn(nullable=false) 
    */ 
    private $subject; 

    /** 
    * @var Period 
    * @ORM\ManyToOne(targetEntity="Period") 
    * @ORM\JoinColumn(nullable=false) 
    */ 
    private $period; 

    /** 
    * @var Classroom 
    * @ORM\ManyToOne(targetEntity="Classroom") 
    * @ORM\JoinColumn(nullable=false, onDelete="CASCADE") 
    */ 
    private $classroom; 

    /** 
    * @var Composition[]|Collection 
    * @ORM\OneToMany(targetEntity="Composition", mappedBy="evaluation", cascade={"all"}) 
    * @Assert\Valid(traverse=true) 
    */ 
    private $compositions; 

彼らは(Evaluationエンティティ内の関係を参照)検証するための複数のエンティティですが、いなくてもEvaluation自体、組合なし検証されません。すべての検証ルールをチェックするにはどうすればよいですか?

答えて

0

解決策が見つかりました:CraueFormFlowBundleは、フローの各ステップに対して、検証グループ名を作成します。私のケースでは、私のcreateEvaluationフロー(フローのgetNameメソッドによって与えられた名前)の第1ステップの検証グループはflow_evaluation_create_step1と命名されています。 Assert注釈で、権利フィールド(つまり現在のステップで編集された人物)の有効性を確認するためにgroupsプロパティを設定しなければなりませんでした。

関連する問題