সিমফনি 2 ফর্ম উপাদানটিতে ত্রুটি যুক্ত করুন


83

আমি আমার নিয়ামকটিতে কিছু বৈধতা যাচাই করি। এবং আমি ব্যর্থতায় আমার ফর্মের নির্দিষ্ট উপাদানটিতে ত্রুটি যুক্ত করতে চাই। আমার ফর্ম:

use Symfony\Component\Form\FormError;

// ...

$config = new Config();
$form = $this->createFormBuilder($config)
        ->add('googleMapKey', 'text', array('label' => 'Google Map key'))
        ->add('locationRadius', 'text', array('label' => 'Location radius (km)'))
        ->getForm();

// ...

$form->addError(new FormError('error message'));

addError () পদ্ধতিটি ফর্মটিতে ত্রুটি যুক্ত করে, উপাদানকে নয়। আমি কীভাবে অবস্থানের রেডিয়াস উপাদানটিতে ত্রুটি যুক্ত করতে পারি?

উত্তর:


178

আপনি করতে পারেন

$form->get('locationRadius')->addError(new FormError('error message'));

যেমন ফর্ম উপাদানগুলিও FormInterfaceধরণের।


@ এম 2 এমডাস, দুর্দান্ত উত্তর! আমরা কীভাবে এটি অনুবাদ করব? কারণ একবার আমরা যখন ফর্মআরর উদাহরণ তৈরি করি, এটি এটি অনুবাদ করে না, আমি ঠিক আছি? আমি চেষ্টা করেছি এবং এটি অনুবাদ করে না, এবং আমি মনে করি এটি উপলব্ধি করে। আপনি কীভাবে একটি ফর্মেরর উদাহরণটি অনুবাদ করবেন?
মিক

4
হ্যালো @ প্যাট, দেরিতে জবাবের জন্য দুঃখিত। ভ্যালিডেটর উপাদান ফর্মটিতে ত্রুটি বার্তা যুক্ত হওয়ার আগে ফর্ম সীমাবদ্ধতা লঙ্ঘন বার্তাগুলি অনুবাদ করার যত্ন নেয় care কাস্টম ত্রুটি যুক্ত করার জন্য আপনি যেমন বার্তাটি অন্য স্ট্রিংয়ের মতো $this->get('translator')->trans('error message')
মুন মুন দাস

4
@ এম 2 এমডাস তবে আপনার দৃষ্টিতে এই ত্রুটিটি কীভাবে মুদ্রণ করবেন? আমি এটি চেষ্টা করেছিলাম, কিন্তু এটি form_errors(form)আমার পাতায় যায় না।
নাট নাইডেনোভা

4
@ নাটনাডেনোভা আমি জানি কিছুক্ষণ হয়ে গেছে তবে চেষ্টা করুনform_erros(form.my_field_name)
টিমিচেল

4
দয়া করে নোট করুন: form_erferences (ফর্ম) ব্যবহার করে মুদ্রণ করতে একটি ত্রুটি পেতে ফর্মটিতে নিজের ত্রুটি যুক্ত করুন যেমন $ form-> addError (নতুন ফর্মেরার ('ত্রুটি চিহ্ন'));
beterthanLive

8

ঠিক আছে ছেলেরা, আমার আর একটি উপায় আছে এটি আরও জটিল এবং শুধুমাত্র নির্দিষ্ট ক্ষেত্রে।

আমার ক্ষেত্রে:

আমার একটি ফর্ম আছে এবং জমা দেওয়ার পরে আমি এপিআই সার্ভারে ডেটা পোস্ট করি। এবং ত্রুটিগুলিও আমি এপিআই সার্ভার থেকে পেয়েছি।

এপিআই সার্ভার ত্রুটি বিন্যাসটি হ'ল:

array(
    'message' => 'Invalid postal code',
    'propertyPath' => 'businessAdress.postalCode',
)

আমার লক্ষ্য নমনীয় সমাধান পেতে। সংশ্লিষ্ট ক্ষেত্রের জন্য ত্রুটি সেট করতে দেয়।

$vm = new ViolationMapper();

// Format should be: children[businessAddress].children[postalCode]
$error['propertyPath'] = 'children['. str_replace('.', '].children[', $error['propertyPath']) .']';

// Convert error to violation.
$constraint = new ConstraintViolation(
    $error['message'], $error['message'], array(), '', $error['propertyPath'], null
);

$vm->mapViolation($constraint, $form);

এটাই!

বিঃদ্রঃ! addError()পদ্ধতি ত্রুটি_ম্যাপিং বিকল্পটিকে বাইপাস করে ।


আমার ফর্ম (ঠিকানার ফর্মটি সংস্থা ফর্মটিতে এম্বেড করা হয়েছে):

প্রতিষ্ঠান

<?php

namespace Acme\DemoBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints;

class Company extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('companyName', 'text',
                array(
                    'label' => 'Company name',
                    'constraints' => array(
                        new Constraints\NotBlank()
                    ),
                )
            )
            ->add('businessAddress', new Address(),
                array(
                    'label' => 'Business address',
                )
            )
            ->add('update', 'submit', array(
                    'label' => 'Update',
                )
            )
        ;
    }

    public function getName()
    {
        return null;
    }
}

ঠিকানা

<?php

namespace Acme\DemoBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints;

class Address extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            // ...
            ->add('postalCode', 'text',
                array(
                    'label' => 'Postal code',
                    'constraints' => array(
                        new Constraints\NotBlank()
                    ),
                )
            )
            ->add('town', 'text',
                array(
                    'label' => 'Town',
                    'constraints' => array(
                        new Constraints\NotBlank()
                    ),
                )
            )
            ->add('country', 'choice',
                array(
                    'label' => 'Country',
                    'choices' => $this->getCountries(),
                    'empty_value' => 'Select...',
                    'constraints' => array(
                        new Constraints\NotBlank()
                    ),
                )
            )
        ;
    }

    public function getName()
    {
        return null;
    }
}

আপনি এই কোডটি কোথায় রাখবেন? $ ভিএম = নতুন ভায়োলেশনম্যাপার ();
বিড়ি বিডিনি

@ বিদ্যিভিডেনি, নিয়ন্ত্রক পদক্ষেপ যেখানে ফর্ম জমা দেওয়া হবে তা পরিচালনা করা হবে। এছাড়াও আপনি
কোডটির
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.