1

Symfony2 では、ドロップダウンとして 2 つの選択フィールドを持つフォームを追加および編集しています。最初のものには年が含まれており、2 番目のものには週が含まれています。選択した年と週が過ぎていないことを確認したいと思います。つまり、選択するのは良いことであり、年: 2013. および週: 5 の場合は持続したかったのですが、年: 2012. および週 5. の場合は適切ではありません。

基本的には、現在フォームを検証するために doctrine エンティティ マネージャーと isValid() を使用してから、オブジェクトをデータベースに永続化します。

私がネット上で見つけた多くの方法について少し心配しています.

これらを検証するのに最適な方法を教えてください。エンティティの検証、非エンティティ、およびその場所を検索する場所を意味します。:)

どうもありがとうございます。

4

1 に答える 1

1

私は CallbackValidation に行きます:

http://symfony.com/doc/2.0/reference/constraints/Callback.html

検証はisValid()呼び出し中に開始されるため、いつ失敗するかがわかります。

検証コードに関しては、これでうまくいくと思います(まだ実行していません):

/**
 * @Assert\Callback(methods={"isYearWeekValid"})
 */
class YourEntity
{
     ... here go $year and $week


    public function isYearWeekValid(ExecutionContext $context)
    {
        $firstInYear = \DateTime:createFromFormat('Y-m-d', $this->year . '-01-01');
        $interval = new \DateInterval(sprintf('P%dW', $this->week * 7));
        $firstDayOfWeek = $firstInYear->add($interval); # beware, $firstInYear object     was modified hear as well

        $now = new \DateTime();
        if ( $firstInWeek < $now ){
            $context->addViolation('Invalid year/week combination!', array(), null);
        }else{
            // IT'S OK
        }
    }
}

注釈を使用して検証を指定しましたが、その目的のためにXMLorを使用することもできYAMLます...基本的にはすべて同じです...

お役に立てれば....

于 2012-11-13T08:01:08.863 に答える