2012-11-08 11 views
6

मैं एक रूप प्रपत्र घटक Symfony 2. सत्यापन त्रुटियों के रूप में की अलग अनुवाद डोमेन में अनुवाद किया जाता है का उपयोग कर बनाने के लिए, मैं एक विकल्प के रूप में इस जानकारी इंजेक्षन करना चाहते हैं (translation_domain) फॉर्म के निर्माण के दौरान, लेकिन सही (सफल) जगह नहीं कहां सेट करें ... कोई संकेत?Symfony2: जहां फार्म में translation_domain सुई घटक

मैं अपने फॉर्म सूचनाओं को बंडल करने के लिए एक कस्टम प्रकार का उपयोग करता हूं।

मेरे कस्टम प्रकार वर्ग:

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

use Symfony\Component\Validator\Constraints\Collection; 
use Symfony\Component\Validator\Constraints\NotBlank; 

class LoginType extends AbstractType 
{ 

    public function setDefaultOptions(OptionsResolverInterface $resolver) 
    { 
     $collectionConstraint = $collectionConstraint = new Collection(array(
      'password' => array(new NotBlank(array('message' => 'custom.error.blank'))), 
      'username' => array(new NotBlank(array('message' => 'custom.error.blank'))) 
     )); 

     $resolver->setDefaults(array(
      'constraints' => $collectionConstraint 
     )); 
    } 

    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder->add('username', 'text', array(
      'max_length'  => 250, 
      'trim'    => true 
     )); 
     $builder->add('password', 'password', array(
      'max_length'  => 250, 
      'trim'    => true 
     )); 
    } 

    public function getName() 
    { 
     return 'login'; 
    } 
} 

प्रासंगिक कोड नियंत्रक में प्रपत्र निर्माण पर स्निपेट:

$loginForm = $this->createForm(new LoginType(), $loginDefaultData); 

$loginForm->bind($request); 

[...] 

return $this->render(
    'MyBundle:SubFolder:login.html.twig', 
    array(
     'loginForm' => $loginForm->createView() 
    ) 
); 

उत्तर

8

थोड़ी देर बाद में समस्या की ओर लौटने के बाद, मैं कारण पाया: गतिशील translation_domain कर सकते हैं पीछा के रूप में setDefaultOptions के भीतर सेट किया जाना चाहिए।

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{ 
    // ... 

    $resolver->setDefaults(array(
     'constraints'  => $collectionConstraint, 
     'translation_domain' => 'customTranslationDomain' 
    )); 
} 

हालांकि, प्रयुक्त टहनी टेम्पलेट में, इस translation_domain लेबल और विकल्पों के लिए प्रयोग किया जाता है, लेकिन त्रुटि संदेश इस translation_domain के साथ परोसा नहीं कर रहे हैं। वे हमेशा

पर डिफ़ॉल्ट टहनी टेम्पलेट में ही तय सेट डोमेन 'सत्यापनकर्ताओं' के साथ अनुवाद किया जाता है /Symfony/Bridge/Twig/Resources/views/Form/form_div_layout.html.twig

यह आमतौर पर इन संदेशों को एक डोमेन में बंडल करने का अर्थ होता है, लेकिन मेरे मामले में नहीं, क्योंकि समान बाधा (और इसके त्रुटि संदेश) को संदर्भ के आधार पर विभिन्न तरीकों से अनुवादित किया जाना चाहिए और प्रत्येक संदर्भ एक अलग डोमेन में व्यवस्थित किया गया था।

मेरा समाधान customize the form rendering as described in the Symfony2 documentation पर था, form_errors खंड को फिर से परिभाषित करें और त्रुटि संदेश आउटपुट के लिए गतिशील transl_domain twig चर का भी उपयोग करें।