2016-10-27 17 views
0

共通の抽象クラスを継承する2つのエンティティをSymfonyプロジェクトに持ち、エンティティごとにXML設定フォーマットを使用して定義しました。共通の抽象クラスを継承するオブジェクトの検証設定を継承

2つのエンティティは、抽象クラスから継承した共通のプロパティセットを持っているため、それぞれのルールをそれぞれの検証設定に複製しています。

誰かが1つのルールを変更し、他のルールの更新を怠ると、これは明らかに理想的ではありません。

抽象クラスの検証コンフィグレーションを定義し、抽象クラスの検証を継承する各エンティティのコンフィグレーションを設定できるXMLコンフィグレーションの戦略はありますか?

Annotationの設定やPHPの設定でこれが可能であるようです。しかし、私はXMLやYAMLで同じことをする方法を見ていません。

答えて

0

symfonyは自動的にクラスの階層を調べ、関係するクラスごとに定義されたバリデータを読み込みます。 AbstractClassため

<?php 

abstract class AbstractClass { 
    protected $inheritedProperty; 
} 

class MyConcreteClass extends AbstractClass { 
    protected $myProperty; 
} 

バリMyConcreteClassのために、唯一の(すなわち$myProperty。)、それは独自のプロパティだ説明します

<?xml version="1.0" ?> 
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping 
         http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> 
    <class name="MyConcreteClass"> 
     <property name="myProperty"> 
      <constraint name="NotBlank" /> 
     </property> 
    </property> 
    </class> 
</constraint-mapping> 

バリ、のみ説明します:

したがって、次のPHPクラスを取りますそれ自身のプロパティです(つまり、$inheritedProperty)。

<?xml version="1.0" ?> 
<constraint-mapping xmlns="http://symfony.com/schema/dic/constraint-mapping" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://symfony.com/schema/dic/constraint-mapping 
         http://symfony.com/schema/dic/constraint-mapping/constraint-mapping-1.0.xsd"> 
    <class name="AbstractClass"> 
     <property name="inheritedProperty"> 
      <constraint name="NotBlank" /> 
     </property> 
    </class> 
</constraint-mapping> 
012必要な追加の構成はありません - MyConcreteClassオブジェクトを検証するとき

、symfonyは自動的MyConcreteClassAbstractClassを拡張し、それがMyConcreteClassバリデータに加えて、AbstractClassバリデータをロードする必要があることを識別することになります。

関連する問題