我在src/VNN/PressboxBundle/Component/Validator/CurrentPasswordValidator.php
一個自定義的驗證:Symfony2的自定義的驗證標註不工作
<?php
namespace VNN\PressboxBundle\Component\Validator\Constraints;
use Symfony\Component\Validator\ConstraintValidator,
Symfony\Component\Validator\Constraint,
Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface,
Symfony\Component\Security\Core\SecurityContextInterface,
JMS\DiExtraBundle\Annotation\Validator,
JMS\DiExtraBundle\Annotation\InjectParams,
JMS\DiExtraBundle\Annotation\Inject;
/**
* @Validator("user.validator.current_password")
*/
class CurrentPasswordValidator extends ConstraintValidator
{
// ...
}
然後,我有這樣的src/VNN/PressboxBundle/Component/Validator/Contraints/CurrentPassword.php
:
<?php
namespace VNN\PressboxBundle\Component\Validator\Constraints;
use Symfony\Component\Validator\Constraint;
/**
* @Annotation
*/
class CurrentPassword extends Constraint
{
public $message = "Your current password is not valid";
/**
* @return string
*/
public function validatedBy()
{
return 'user.validator.current_password';
}
}
出於某種原因,當我嘗試添加註釋使用這個驗證器,我得到一個錯誤。這裏是我的實體/註釋:
<?php
namespace VNN\PressboxBundle\Entity;
use Symfony\Component\Security\Core\User\UserInterface;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\JoinTable as JoinTable;
use Doctrine\ORM\Mapping\JoinColumn as JoinColumn;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\ExecutionContext;
use Symfony\Component\Validator\Mapping\ClassMetadata;
use Symfony\Component\Validator\Constraints\NotBlank;
use Symfony\Component\Validator\Constraints\MaxLength;
use Symfony\Component\Validator\Constraints\Email;
use VNN\PressboxBundle\Component\Validator\Constraints\CurrentPassword;
use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;
/**
* VNN\PressboxBundle\Entity\User
*
* @ORM\Table(name="user")
* @ORM\Entity
*/
class User implements UserInterface, \Serializable
{
/**
* @var string $password
* @Assert\NotBlank()
* @CurrentPassword()
*
* @ORM\Column(name="password", type="string", length=255)
*/
private $password;
}
我得到的錯誤是:
AnnotationException:語義錯誤]註釋 「@VNN \ PressboxBundle \分量\驗證\約束\ CurrentPassword」 屬性VNN \ PressboxBundle \ Entity \ User :: $密碼不存在, 或無法自動加載。
我在做什麼錯?
感謝您的想法。我檢查了「VNNPressboxBundle」已正確註冊。 – 2012-04-03 00:03:21
@JasonSwett:用一些其他的可能性更新了我的答案。 – leek 2012-04-03 01:07:13