| س | أ
| ---------------- | -----
| تقرير الشوائب؟ | نعم
| طلب المواصفات؟ | رقم
| تقرير BC Break؟ | رقم
| RFC؟ | رقم
| إصدار Symfony | 3.2.6
باستخدام الكيان التالي كنموذج ،
<?php
class Test
{
public function getName() : string
{
return $this->name;
}
public function setName(string $name) : void
{
$this->name = $name;
}
}
ونوع النموذج التالي ،
<?php
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
class TestType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'name',
TextType::class,
[
'constraints' => [
new NotBlank(),
new Length(['max' => 255])
]
]
)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefault('data_class', Test::class);
}
}
ستظهر رسالة الخطأ التالية إذا كانت بيانات النموذج غير صالحة:
Expected argument of type "string", "NULL" given
يبدو أن التحقق يحدث بعد تعيين القيم في الكيان.
قد ترغب في إعادة زيارة # 5480.
يجب ألا تستخدم أنواعًا صارمة لكائنات البيانات في نماذجك. يمكن أن تكون مجموعة البيانات خالية من الناحية النظرية (على الرغم من أنها قد لا تحدث) ، ولكن من السهل حقًا كسر الكائن عند إرجاعه فارغًا بدلاً من سلسلة في getter.
يبدو أن التحقق يحدث بعد تعيين القيم في الكيان.
هذا صحيح. هذا أيضًا هو سبب وجوب السماح لكيانك / نموذجك بأن يكون في حالة غير صالحة إذا كنت تريد ربط الكيانات / النماذج الخاصة بك بالنماذج. إذا كنت تريد التغلب على هذه المشكلة ، فيرجى قراءة: https://stovepipe.systems/post/rethinking-form-development
مرحبًا @ kherrera-ebsco ، تم إصلاح هذا حيث يمكنك استخدام symfony 3.1:
class TestType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add(
'name',
TextType::class,
[
'constraints' => [
new NotBlank(),
new Length(['max' => 255])
],
'empty_data' => '',
]
)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefault('data_class', Test::class);
}
}
الحل الآخر هو إضافة نموذج محول بنفسك.
شكرًا على المساعدة ، لكن يبدو أن وجهة نظري في هذا الأمر مختلفة.
إذا كان النموذج غير قادر على توفير بيانات صالحة لكائن بمتطلبات صارمة (تمرير سلسلة فارغة يتبع القاعدة ولكن ليس الروح) ، فيجب توثيق أنه غير مدعوم. أستطيع أن أفهم الحاجة إلى حل وسط ، باستخدام منشئ لكائن جديد ، لكنني أزعم أن هذا الحل يجب أن يكون موثقًا.
نظرًا لتاريخ هذه المشكلة والمشكلات الأخرى التي تم فتحها وإغلاقها ، سأغلق هذه المشكلة وأعتبرها "لن يتم إصلاحها".
التعليق الأكثر فائدة
شكرًا على المساعدة ، لكن يبدو أن وجهة نظري في هذا الأمر مختلفة.
إذا كان النموذج غير قادر على توفير بيانات صالحة لكائن بمتطلبات صارمة (تمرير سلسلة فارغة يتبع القاعدة ولكن ليس الروح) ، فيجب توثيق أنه غير مدعوم. أستطيع أن أفهم الحاجة إلى حل وسط ، باستخدام منشئ لكائن جديد ، لكنني أزعم أن هذا الحل يجب أن يكون موثقًا.
نظرًا لتاريخ هذه المشكلة والمشكلات الأخرى التي تم فتحها وإغلاقها ، سأغلق هذه المشكلة وأعتبرها "لن يتم إصلاحها".