1

Symfony2では、コマンドを実行するbin/vendors installと次のメッセージが表示されます。

?? src/Symfony/Component/Validator/Constraints/Alphanumeric.php
?? src/Symfony/Component/Validator/Constraints/AlphanumericValidator.php
?? src/Symfony/Component/Validator/Constraints/GreaterThan.php
?? src/Symfony/Component/Validator/Constraints/GreaterThanValidator.php
"symfony" has local modifications. Please revert or commit/push them before running this command again.

リストされているファイルは、ここのクックブックエントリに従って私が作成したカスタム制約バリデーターです。

私が行った変更を無視してdepsファイルを更新する方法はありますか?私の目標は、私が作成した制約バリデーターファイルを保持しながら、新しいバンドルをインストールすることです。

更新: Peterのソリューションは正しかった、残っているのは次のようにエンティティ内の正しい名前空間を「使用」することだけです。

(コードにはスペイン語の単語が含まれています。一貫性を保つために、私はDemoBundleにいると仮定します)

namespace Acme\DemoBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Symfony\Component\Validator\Constraints as Assert;
use Acme\DemoBundle\Component\Validator\Constraints as CustomAssert;

/**
 * @ORM\Entity
 */
class Employee
{
    //...

    /**
     * @ORM\Column(type="string", length=20)
     * @Assert\NotBlank()
     * @CustomAssert\Alphanumeric()
     */
    protected $alfanum;

    //...
}
4

3 に答える 3

3

vendor ディレクトリに含まれているものは一切変更しないでください。追加する新しい機能がある場合 (常に追加する必要があります)、これらの機能をアプリケーション固有のバンドル (src ディレクトリ内) に入れます。

名前空間/クラス スキームは、フレームワークの規則に従う必要があります。たとえば、制約バリデーターは「src/MyNamespace/MyBundle/Validator/Constraint」に入れる必要があります (名前空間は「MyNamespace\MyBundle\Validator\Constraint」にする必要があります)。

バージョン マネージャーはベンダー ディレクトリを無視する必要があることに注意してください。

于 2012-05-10T19:14:47.150 に答える
2

いいえ、これをしないでください。作成するカスタムバリデーター(またはカスタムのもの)は、Symfonyではなく、名前空間の一部である必要があります。そして、それらは確かにベンダーディレクトリであってはなりません(独自のベンダーを作成しない限り)。これが名前空間とベンダー管理の要点です-衝突を避けるためです!

したがって、カスタムバリデーターをアプリケーションのソースに移動する必要があります。例としてAcmeDemoBundleを使用しています...

次のパスのディレクトリを作成します

src/Acme/DemoBundle/Component/Validator/Constraints

次に、カスタムバリデーターをこのフォルダーに移動します。次に、それに応じて各バリデータークラスの名前空間を更新します

namespace Acme\DemoBundle\Component\Validator\Constraints

乾杯

于 2012-05-10T19:25:15.757 に答える
2

カスタムバリデーターを独自のバンドルに入れ、次の方法で参照できます。

# in validation.yml

# define namespace identifier
namespaces:
  namespace_name: Path\To\Your\Validator\Namespace\

# then in your entity
FQCN\Of\Entity:
  constraints:
    - Path\To\Your\Validator\Namespace\Alphanumeric
    # or
    - "namespace_name:Alphanumeric": ~ 
于 2012-05-10T19:37:29.480 に答える