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 № 1Za 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ć:
- Jak zdefiniować grupę walidacyjną w swoich formularzach
- Jak zdefiniować grupę sprawdzania poprawności do bezpośredniego sprawdzania poprawności obiektu (bez użycia komponentu formularza)
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.