2016-03-21 2 views
2

У меня есть следующий код в buildForm, и я хочу получить перевод 'report_abuse', но я не могу найти способ. Является ли это возможным ?Symfony, как перевести значение данных в форму

class AbuseType extends AbstractType 
{ 
    // ... 

    $builder->add('subject', TextType::class, array(
     'label' => 'label.subject', 
     'data' => 'report_abuse', 
     'disabled' => 'true', 
    )) 

    // ... 
} 
+0

Вы добавили 'report_abuse' в один из файлов перевода? я понимаю, что вы хотите перевести значение, которое отображается в поле ввода 'subject'? – Baig

+0

Да Я добавил report_abuse в файл xlf и да, я хотел перевести значение, отображаемое в поле, поэтому я обманул, чтобы получить значение, переведенное, прежде чем вставлять его в мой объект. Я ответил на мой вопрос ниже. – Laurent

ответ

1

Try явно установить translation_domain:

$builder->add('subject', TextType::class, array(
    // ... 
    'translation_domain' => 'messages', 
)) 

Вы также можете сделать это для всей FormType путем добавления этого метода в:

public function setDefaultOptions(OptionsResolverInterface $resolver) 
{  
    $resolver->setDefaults(array(
     'translation_domain' => 'messages' 
    )); 
} 

Если он не работает, введите translator в FormType, зарегистрировав его as a service:

# services.yml 
services: 
    app.form.type.abuse: 
     class: AppBundle\Form\Type\AbuseType 
     arguments: [ "@translator" ] 
     tags: 
      - { name: form.type } 

Вызов переводчика непосредственно:

use Symfony\Component\Translation\TranslatorInterface; 

class AbuseType extends AbstractType 
{ 
    public function __construct(TranslatorInterface $translator) 
    { 
     $this->translator = $translator; 
    } 

    // ... 

    $builder->add('subject', TextType::class, array(
     'label' => 'label.subject', 
     'data' => $this->translator->trans('report_abuse', array(), 'messages'), 
     'disabled' => 'true', 
    )) 
} 
+0

Спасибо за ваши ответы. Ни один из двух первых не сработал ... Я не буду использовать третий, поскольку он «слишком много» для перевода, все остальные части правильно переведены, но я сохраню его в качестве примера службы. – Laurent

+0

Я могу понять что для вас это слишком много, но если вам действительно нужно перевести значение этой опции ... вам понадобится переводчик, и поэтому вам нужно получить его в своем типе. – chalasr

+0

Речь идет не о «излишестве», но если Symfony не позволяет/задает возможность перевода данных, так как для метки это по причине (какой из них ???). Поэтому я предпочитаю искать другой путь, в том числе не имея необходимости переводить. Но на самом деле спасибо за ваше время и помощь. – Laurent

0

Так это то, что я сделал. Я ввел предмет в класс Abuse, поскольку его значение будет принято по умолчанию для создания формы. Я также установил поле как только для чтения вместо отключенного, что заставляет поля НЕ отправляться.

//FormController.php 
    class FormController extends Controller 
    { 
     //... 
     public function abuseAction(Request $request) 
     { 
      $subject = $this->get('translator')->trans('report_abuse'); 
      $abuse = new Abuse($subject); 
      //... 
     } 
     //... 
    } 

//Abuse.php 
    class Abuse 
    { 
     //... 

     public function __construct($subject) 
     { 
      $this->setSubject($subject); 
     } 

    //... 
    } 

//AbuseType.php 
class AbuseType extends AbstractType 
{ 
    //... 

    $builder->add('subject', TextType::class, array(
     'label' => 'label.subject', 
     'attr' => array(
      'readonly' => true, 
     ))) 

    //... 
} 
Смежные вопросы