Antara muka
adalah alat yang mantap untuk pengesahan objek yang komprehensif, terutamanya berguna untuk mengesahkan objek kompleks dengan kebergantungan antara harta. Antara muka ini membolehkan pengesahan yang bergantung kepada nilai sifat lain dalam objek yang sama. Walau bagaimanapun, menggabungkan ini dengan atribut pengesahan harta individu (seperti atau IValidatableObject
) memerlukan pertimbangan yang teliti. [Required]
[Range]
Kaedah
dan IValidatableObject.Validate()
hanya apabila harta Prop1
adalah benar. Inilah cara anda melaksanakannya: Prop2
Enable
<code class="language-csharp">public class ValidateMe : IValidatableObject { [Required] public bool Enable { get; set; } [Range(1, 5)] public int Prop1 { get; set; } [Range(1, 5)] public int Prop2 { get; set; } public IEnumerable<ValidationResult> Validate(ValidationContext validationContext) { if (!Enable) { return Enumerable.Empty<ValidationResult>(); } var validationResults = new List<ValidationResult>(); // Add conditional validation rules here. For example: if (Prop1 < 1 || Prop1 > 5) { validationResults.Add(new ValidationResult("Prop1 must be between 1 and 5", new[] { nameof(Prop1) })); } if (Prop2 < 1 || Prop2 > 5) { validationResults.Add(new ValidationResult("Prop2 must be between 1 and 5", new[] { nameof(Prop2) })); } return validationResults; } }</code>
ke Validator.TryValidateObject()
. Ini menghalang rangka kerja daripada mengesahkan sifat secara automatik dengan atribut seperti validateAllProperties
apabila false
adalah palsu, memastikan logik bersyarat anda dalam [Range]
mengambil keutamaan. Ini membolehkan pemisahan kebimbangan yang bersih antara pengesahan harta individu dan pengesahan bersyarat, silang harta. Enable
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pengesahan harta bersyarat menggunakan ivalidatableObject?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!