ঠিক আছে ছেলেরা, আমার আর একটি উপায় আছে এটি আরও জটিল এবং শুধুমাত্র নির্দিষ্ট ক্ষেত্রে।
আমার ক্ষেত্রে:
আমার একটি ফর্ম আছে এবং জমা দেওয়ার পরে আমি এপিআই সার্ভারে ডেটা পোস্ট করি। এবং ত্রুটিগুলিও আমি এপিআই সার্ভার থেকে পেয়েছি।
এপিআই সার্ভার ত্রুটি বিন্যাসটি হ'ল:
array(
'message' => 'Invalid postal code',
'propertyPath' => 'businessAdress.postalCode',
)
আমার লক্ষ্য নমনীয় সমাধান পেতে। সংশ্লিষ্ট ক্ষেত্রের জন্য ত্রুটি সেট করতে দেয়।
$vm = new ViolationMapper();
$error['propertyPath'] = 'children['. str_replace('.', '].children[', $error['propertyPath']) .']';
$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;
}
}