Nie, obecnie nie jest to możliwe.
Nie ma nic wspólnego z YAML lub XML ani nawet z definicjami usług. Składnik walidatora samodzielnie odczytuje reguły sprawdzania poprawności - jak widać struktura jest zupełnie inna niż w przypadku definicji usług. Niestety nie zastępuje parametrów w wiązaniach.
Główna logika znajduje się w \Symfony\Component\Validator\Mapping\Loader\YamlFileLoader
, która jest tworzona przez \Symfony\Component\Validator\ValidatorBuilder::getValidator
.
Można tego dokonać poprzez:
- Zastępowanie definicja
validator.builder
usługi.
Jest zbudowany przy użyciu %validator.builder.factory.class%::createValidatorBuilder
, ale jak trzeba dostać torbę parametru jakoś, nie ma wystarczająco dużo zależnościami - fabryka klasa jest w użyciu, nie serwisu fabrycznego.
- Tworzenie nowej klasy, która rozszerza się o
ValidatorBuilder
.
Powinieneś wziąć torbę parametrów do konstruktora lub przez settera. Powinien być skonfigurowany w kroku (1) do przekazania tutaj.
Ta klasa tworzy pliki ładujące innej klasy (patrz 3), również przekazuje do niej ten pakiet parametrów.
- Tworzenie nowych klas dla
YamlFileLoader
i YamlFilesLoader
. Dodatkowe 2 dla każdego formatu, który chciałbyś obsłużyć.
Dodatkowo wziąłby worek parametrów do konstruktora i zastąpiłby niektóre funkcje. Na przykład, myślę, że obsługa wszystkich parametrów może być wykonana w metodzie newConstraint
- iterowanie przez opcje, rozwiązywanie parametrów, a następnie wywoływanie metody nadrzędnej z zastąpionymi opcjami.
To miłe, że Symfony może zostać rozszerzony tak (może nie tak ładnie w tym użytkowej przypadku), ale myślę, że byłoby łatwiej po prostu napisać własne ograniczenia z niestandardowych więzów weryfikatora, który wstrzykiwać że parametr do niego.
Weź również pod uwagę opakowanie usługi sprawdzania poprawności - jeśli musisz tylko wymienić komunikaty sprawdzania poprawności, możesz zastąpić usługę validator
, wprowadzając do niej oryginalny. Aby uzyskać więcej informacji, patrz http://symfony.com/doc/current/service_container/service_decoration.html.
Miałem to samo pytanie (i nie znalazłem tego wcześniej), które ma kilka interesujących komentarzy (ale nie ma jeszcze odpowiedzi): http://stackoverflow.com/questions/42486647/use-parameters-in-validation –