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