2012-04-07 10 views
1

ユーザー エンティティのvalidation.ymlで検証制約が定義されていますが、実際には呼び出されていません。それは で働いていましたが、3つの制約のどれもチェックされていません。 SQL固有の制約エラーが発生するため、コード内で が正しく処理されていないことは間違いありません。ここでFOSUserBundle/Symfony2:ユーザーエンティティに対して検証制約が全く適用されない

は私のvalidation.ymlです:

Acme\CPBundle\Entity\User: 
    constraints: 
     - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: { fields: username, message: userExists } 
     - FOS\UserBundle\Validator\Unique: {property: usernameCanonical, message: userExists} 
     - Callback: 
      methods: [isTimeZoneValid] 
    properties: 
     firstName: 
      - MaxLength: 255 
     lastName: 
      - MaxLength: 255 
     username: 
      - NotBlank: { groups: [create_user] } 
      - MinLength: { limit: 4, groups: [create_user] } 
      - MaxLength: { limit: 50, groups: [create_user] } 
     email: 
      - NotBlank: { groups: [create_user, edit_user] } 
      - MaxLength: { limit: 255, groups: [create_user, edit_user] } 
      - Email: 
       message: The email "{{ value }}" is not a valid email 
       checkMX: true 
     plainPassword: 
      - NotBlank: { groups: [create_user] } 
      - MinLength: { limit: 6, groups: [create_user], message: "passwordMin {{ limit }}" } 
     newPassword: 
      - MinLength: { limit: 6, groups: [edit_user], message: "passwordMin {{ limit }}" } 
     singleRole: 
      - Choice: { callback: getAllowedRoles } 

、ここでは私のユーザエンティティです:

<?php 

namespace Acme\CPBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 
use Doctrine\Common\Collections\ArrayCollection; 
use FOS\UserBundle\Model\User as BaseUser; 
use Acme\CPBundle\Constant\SecurityConstant; 
use Symfony\Component\Validator\ExecutionContext; 

/** 
* Acme\CPBundle\Entity\User 
*/ 
class User extends BaseUser { 

/** 
* @var \Acme\CPBundle\Entity\Organization $organization 
*/ 
private $organization; 

/** 
* @var string $firstName 
*/ 
private $firstName; 

/** 
* @var string $lastName 
*/ 
private $lastName; 

/** 
* @var DateTime $timeZone 
*/ 
private $timeZone; 

/** 
* @var Role $singleRole 
*/ 
private $singleRole; 

/** 
* @var ArrayCollection $sessions 
*/ 
private $sessions; 


/** 
* @var integer $id 
*/ 
protected $id; 

public function __construct() { 
    parent::__construct(); 
    $this->enabled = true; 
    $this->sessions = new ArrayCollection(); 
} 

public function setFirstName($firstName) { 
    $this->firstName = $firstName; 
} 

public function getFirstName() { 
    return $this->firstName; 
} 

public function setLastName($lastName) { 
    $this->lastName = $lastName; 
} 

public function getLastName() { 
    return $this->lastName; 
} 

public function setTimeZone($timeZone) { 
    $this->timeZone = $timeZone; 
} 

public function getTimeZone() { 
    return $this->timeZone; 
} 

public function getId() { 
    return $this->id; 
} 

public function setOrganization(\Acme\CPBundle\Entity\Organization 
    $organization) { 
     $this->organization = $organization; 
} 

public function getOrganization() { 
    return $this->organization; 
} 

public function setSingleRole($singleRole) { 
    $this->singleRole = $singleRole; 
} 

public function getSingleRole() { 
    return $this->singleRole; 
} 

public function setSessions($sessions) { 
    $this->sessions = $sessions; 
} 

public function getSessions() { 
    return $this->sessions; 
} 

/* 
* Form Validation Methods 
*/ 
public static function getAllowedRoles() { 
    return array(SecurityConstant::ROLE_ADMIN, 
     SecurityConstant::ROLE_ORG_ADMIN, SecurityConstant::ROLE_USER); 
} 

public function isTimeZoneValid(ExecutionContext $context) { 
    $timeZoneIdentifiers = \DateTimeZone::listIdentifiers(); 
    if (!in_array($this->getTimeZone(), $timeZoneIdentifiers)) { 
     $propertyPath = $context->getPropertyPath() . '.timeZone'; 
     $context->setPropertyPath($propertyPath); 
     $context->addViolation('timeZoneInvalid', array(), null); 
    } 
} 

私は日のためにこれを理解しようとしてきたが、私はのないわずかな アイデアを持っていません何が問題なのか。

ご協力いただければ幸いです。

ありがとう、

答えて

4

他の制約のようにグループを設定することもできます。

constraints: 
    - Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity: { fields: username, groups: [create_user, default], message: userExists } 
    - FOS\UserBundle\Validator\Unique: { property: usernameCanonical, groups: [create_user, default], message: userExists } 
    - Callback: 
     methods: [isTimeZoneValid] 
     groups: [create_user, default] 
+0

ありがとう!私がこれを見つけ出すまでには、1時間の検索と試行が必要でした。 – Andrew

+0

同じ問題があります。これをvalidation.ymlに追加しましたか? –

関連する問題