Symfony: [DX] [Validation] تعيين قيم غير صالحة للكيان باستخدام تلميحات الكتابة.

تم إنشاؤها على ٢١ مارس ٢٠١٧  ·  3تعليقات  ·  مصدر: symfony/symfony

| س | أ
| ---------------- | -----
| تقرير الشوائب؟ | نعم
| طلب المواصفات؟ | رقم
| تقرير 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.

Feature Form

التعليق الأكثر فائدة

شكرًا على المساعدة ، لكن يبدو أن وجهة نظري في هذا الأمر مختلفة.

إذا كان النموذج غير قادر على توفير بيانات صالحة لكائن بمتطلبات صارمة (تمرير سلسلة فارغة يتبع القاعدة ولكن ليس الروح) ، فيجب توثيق أنه غير مدعوم. أستطيع أن أفهم الحاجة إلى حل وسط ، باستخدام منشئ لكائن جديد ، لكنني أزعم أن هذا الحل يجب أن يكون موثقًا.

نظرًا لتاريخ هذه المشكلة والمشكلات الأخرى التي تم فتحها وإغلاقها ، سأغلق هذه المشكلة وأعتبرها "لن يتم إصلاحها".

ال 3 كومينتر

يجب ألا تستخدم أنواعًا صارمة لكائنات البيانات في نماذجك. يمكن أن تكون مجموعة البيانات خالية من الناحية النظرية (على الرغم من أنها قد لا تحدث) ، ولكن من السهل حقًا كسر الكائن عند إرجاعه فارغًا بدلاً من سلسلة في 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);
    }
}

الحل الآخر هو إضافة نموذج محول بنفسك.

شكرًا على المساعدة ، لكن يبدو أن وجهة نظري في هذا الأمر مختلفة.

إذا كان النموذج غير قادر على توفير بيانات صالحة لكائن بمتطلبات صارمة (تمرير سلسلة فارغة يتبع القاعدة ولكن ليس الروح) ، فيجب توثيق أنه غير مدعوم. أستطيع أن أفهم الحاجة إلى حل وسط ، باستخدام منشئ لكائن جديد ، لكنني أزعم أن هذا الحل يجب أن يكون موثقًا.

نظرًا لتاريخ هذه المشكلة والمشكلات الأخرى التي تم فتحها وإغلاقها ، سأغلق هذه المشكلة وأعتبرها "لن يتم إصلاحها".

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات