[英]How to use normalizer option in Symfony constraints component
文檔https://symfony.com/doc/4.4/reference/constraints/Length.html#normalizer指出
此選項允許在檢查是否有效之前定義應用於給定值的 PHP 可調用對象。
例如,您可能希望傳遞 'trim' 字符串以應用修剪 PHP 函數,以便在驗證期間忽略前導和尾隨空格。**
我能夠像示例中一樣調用trim,甚至可以調用類的靜態函數:
class PersonDto
{
/**
* @Assert\Length(min="1", max="255", allowEmptyString=false, normalizer="App\Dto\PersonDto::foo")
*/
private ?string $name = null;
public static function foo($value) {
$value = 'the text has been replaced';
return $value;
}
...
}
但由於某種原因,返回的值不會改變該值。 我做錯了什么,或者如何將回調函數寫入“normalizer”選項
Symfony 驗證器不會更改您傳遞給它進行驗證的值,它只是檢查它們是否符合您指定的約束。 因此,在您的情況下,它會在檢查長度時使用修剪以確保它有效,但會保留 DTO 屬性供您處理。
我假設使用 fosrestbundle 標記,您一直在使用請求正文轉換器偵聽器將直接傳遞給 DTO 的數據轉換?
當我需要類似的東西時,我所做的是使用 Symfony Serializer 從請求數據中生成我的 DTO 和它自己的非規范化器,這使得它期望的字段通過並通過修剪准備數據,如果它是一個字符串等,然后手動將其傳遞給驗證器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.