mySQL에서 ENUM 필드를 시뮬레이트하는 유효성 검사를 위해 수명주기 콜백을 갖도록 내 Entity를 설정했습니다.symfony 유효성 검사 콜백 - 오류 발생시 속성 이름을 얻는 방법?
오류가 발생하면 속성 이름을 제공하지 않아서 Assert에서 오는 오류의 형식과 일치하지 않는다는 점만 제외하면 잘 작동합니다.
UsedBundle \ AdController
이 : 나머지는 어설에 의해 생성 된 문제의 속성을 포함하는 동안 첫 번째 오류 아래의 예에서 는 콜백에서오고있다 및 재산에 대한 정보가 없습니다$errors = $this->form_errors->getErrorMessages($form);
\Doctrine\Common\Util\Debug::dump($errors);
array (3) {[0] => string (14) "잘못된 문!" [ "powerHp"] => array (1) {[0] => string (32) "이 값은 50 이상이어야합니다." } [ "price"] => array (1) {[0] => string (34) "이 값은 1000 이상이어야합니다." }}
메시지로 인해 오류의 출처를 알 수 있지만 사용자에게 출력하기 위해 오류 변수를 생성하는 기능을 중지시킵니다.
다음과 같다 설정 : 귀하의 경우
UsedBundle \ 엔티티 \ 광고
namespace UsedBundle\Entity;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;
use Gedmo\Mapping\Annotation as Gedmo;
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Component\Validator\Context\ExecutionContextInterface;
use Symfony\Component\Validator\Mapping\ClassMetadata;
/**
* @ORM\Entity(repositoryClass="UsedBundle\Repository\AdRepository")
* @ORM\HasLifecycleCallbacks
* @ORM\Table(name="ads")
*/
class Ad
{
/**
* @var integer
*
* @ORM\Id
* @ORM\Column(type="smallint",length=4,unique=true,options={"unsigned":true})
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
......
public static $valid_doors = array(
'2' => '2',
'3' => '3',
'4' => '4',
'5' => '5',
);
/**
* @Assert\Callback
*/
public function validate(ExecutionContextInterface $context, $payload)
{
if (!in_array($this->getdoors(), self::$valid_doors)) {
$context->buildViolation('Invalid doors!')
->atPath('doors')
->addViolation();
}
}
}
감사합니다. @staskrak. 이 일을 제대로 처리하지 못했습니다. $ object 매개 변수를 전달하는 방법은 잘 모르겠습니다. 그럴 수도 있습니다. 나는 3.2 버전을 사용하고 있습니다. 나는 링크 된 문서를 알고 있었지만 속성 이름의 문제는 해결하지 못했습니다. – BernardA
@BernardA -> atPath ('doors') -이 속성은 오류와 관련이 있습니다. -> 폼을 삽입 한 경우 Assert \ Valid()를 사용해야합니다. 주석에 – staskrak