/ / Symfony - Wiele ograniczeń formularza w polu właściwości jednej encji - formularze, symfony, ograniczenia, encja

Symfony - Wiele ograniczeń formularza w polu właściwości jednej encji - formularze, symfony, ograniczenia, encja

Powiedzmy, że mam Human jednostka z $surname właściwość, a ja mam dwa typy formularzy, jeden do tworzenia encji, a drugi do wyszukiwania encji. Kiedy umieszczam adnotację Assert/NotBlank() w usłudze nazwisko jest również używany w formularzu wyszukiwania.

Czy istnieje sposób, w jaki sposób określić adnotację o ograniczeniu, której powinna używać określona forma, a która nie?

Odpowiedzi:

4 dla odpowiedzi № 1

Za pomocą adnotacji możesz także przypisać Grupa walidacyjna do ograniczenia encji jak w przykładzie poniżej (przy użyciu adnotacji):

/**
* @Assert/NotBlank(
*     groups={"search_form"} <--- VALIDATION GROUP
* )
*/
protected $surname;

W zależności od potrzeb możesz dodać jedną lub więcej grup sprawdzania poprawności, aby użyć określonego potwierdzenia w różnych formach / kontekstach, takich jak: groups={"registration", "edit", "search"}

Następnie możesz przeczytać dokumenty (linki są do najnowszej wersji) zobaczyć:


0 dla odpowiedzi nr 2

Możesz usunąć ograniczenie z klasy i ustawić je w kreatorach formularzy, co pozwoli ci mieć różne ograniczenia dla tego samego pola:

class CreateHumanType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
"surname",
TextType::class,
[
"label" => "surname",
"constraints" => [
new NotBlank(
[
"message" => "The surname is required",
]
),
],
]
);
}
//[...]
}

class SearchHumanType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
"surname",
TextType::class,
[
"label" => "surname",
"required" => "false",
]
);
}
//[...]
}

Ewentualnie możesz zachować ograniczenie w klasie i ustawić pole jako nie zmapowane dla wyszukiwania:

class SearchHumanType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
"surname",
TextType::class,
[
"label" => "surname",
"mapped" => false,
"required" => false,
]
);
}
//[...]
}

Następnie musisz obsłużyć go ręcznie w kontrolerze.