5
GitHubがリポジトリの削除を処理する方法と同様のバリデータを作成したいと思います。削除を確認するには、私はレポ名を入力する必要があります。ここでは、エンティティプロパティ "name"を入力して削除を確認します。私は制約に名前を渡す必要があるか、何らかの方法でアクセスする必要があります。どうすればいいですか?Symfony 2の引数/パラメータを使用したカスタムバリデータ/制約
GitHubがリポジトリの削除を処理する方法と同様のバリデータを作成したいと思います。削除を確認するには、私はレポ名を入力する必要があります。ここでは、エンティティプロパティ "name"を入力して削除を確認します。私は制約に名前を渡す必要があるか、何らかの方法でアクセスする必要があります。どうすればいいですか?Symfony 2の引数/パラメータを使用したカスタムバリデータ/制約
あなたは確かにそれを行うためにバリデータの制約を使用することができます。
1:削除フォーム(directyまたはタイプを使用して)を作成します。
return $this->createFormBuilder($objectToDelete)
->add('comparisonName', 'text')
->setAttribute('validation_groups', array('delete'))
->getForm()
;
2:パブリックプロパティを追加しますcomparisonName
エンティティに追加します。 (またはプロキシオブジェクトを使用します)、それは上記の対応するフォームフィールドにマップされます。
3:
/**
* @Assert\Callback(methods={"isComparisonNameValid"}, groups={"delete"})
*/
class Entity
{
public $comparisonName;
public $name;
public function isComparisonNameValid(ExecutionContext $context)
{
if ($this->name !== $this->comparisonName) {
$propertyPath = $context->getPropertyPath() . '.comparisonName';
$context->addViolationAtPath(
$propertyPath,
'Invalid delete name', array(), null
);
}
}
}
4:両方の値を比較するために、クラスレベル、コールバックバリデータ制約を定義ビューでフォームを表示する:
<form action="{{ path('entity_delete', {'id': entity.id }) }}">
{{ form_rest(deleteForm) }}
<input type="hidden" name="_method value="DELETE" />
<input type="submit" value="delete" />
</form>
5:削除クエリが有効であることを確認するには、コントローラで次のように使用します。
$form = $this->createDeleteForm($object);
$request = $this->getRequest();
$form->bindRequest($request);
if ($form->isValid()) {
$this->removeObject($object);
$this->getSession()->setFlash('success',
$this->getDeleteFlashMessage($object)
);
}
return $this->redirect($this->getListRoute());