2016-03-21 6 views
2

Ich habe den folgenden Code in einem BuildForm und ich möchte die Übersetzung von 'report_abuse' erhalten, aber ich kann keinen Weg finden. Ist es möglich ?Symfony, wie Datenwert in ein Formular zu übersetzen

class AbuseType extends AbstractType 
{ 
    // ... 

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

    // ... 
} 
+0

Haben Sie den 'report_abuse' in einer der Übersetzungsdateien hinzugefügt? mein Verständnis ist, dass Sie den Wert übersetzen wollen, der in einem Eingabefeld 'subject' angezeigt wird? – Baig

+0

Ja Ich habe den report_abuse in eine xlf-Datei eingefügt und ja ich wollte den angezeigten Wert in das Feld übersetzen, also habe ich versucht, den Wert zu übersetzen, bevor ich ihn in mein Objekt einfüge. Ich habe auf meine Frage unten geantwortet. – Laurent

Antwort

1

Versuchen explizit die translation_domain auf:

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

Sie können für die ganze FormType tun es auch diese Methode in durch Zugabe:

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

Wenn es nicht funktioniert, spritze die translator in deine FormType ein, indem du sie registrierst as a service:

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

Rufen Sie den Übersetzer direkt:

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

Danke für Ihre Antworten. Keiner der beiden ersten hat gearbeitet ... Ich werde den dritten nicht verwenden, da es "zu viel" für eine Übersetzung ist, alle anderen Teile sind korrekt übersetzt, aber ich werde es als ein Beispiel des Dienstes behalten – Laurent

+0

kann ich verstehen dass es für Sie übertrieben ist, aber wenn Sie wirklich den Wert dieser Option übersetzen müssen ... benötigen Sie den Übersetzer und müssen ihn daher in Ihrem Typ verwenden. – chalasr

+0

Es ist keine Frage von "Overkill", aber wenn Symfony die Möglichkeit, Daten wie für Label zu übersetzen, nicht gesetzt/gesetzt hat, liegt das an einem Grund (welcher?). Also bevorzuge ich es, einen anderen Weg zu finden, einschließlich der Tatsache, dass ich nicht übersetzen muss. Aber danke für deine Zeit und Hilfe. – Laurent

0

So ist es das, was ich tat. Ich habe das Thema in die Missbrauchsklasse injiziert, da sein Wert standardmäßig zum Erstellen des Formulars verwendet wird. Ich habe das Feld auch anstelle von deaktiviert als schreibgeschützt gesetzt, was dazu führt, dass die Felder NICHT gesendet werden.

//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, 
     ))) 

    //... 
} 
Verwandte Themen