-1

Oui, je sais que cela a déjà été demandé et découragé, mais j'ai un bon exemple d'utilisation pour cela. Je suis intéressé à apprendre l'approche supplémentaire orientée sur la vue.Symfony: comment utiliser le composant de traduction dans l'entité __toString?

Le cas d'utilisation:

J'ai une entité, dire Venue (id, name, capacity) que je l'utilise comme collection EasyAdmin. Pour rendre des choix, j'ai besoin que cette entité ait une représentation sous forme de chaîne. Je veux que l'affichage indique %name% (%capacity% places).

Comme vous l'avez deviné correctement, j'ai besoin du mot "places".

je pourrais vouloir le faire

  1. directement dans la méthode de l'entité __toString()
  2. en vue formulaire en rendant correctement __toString() sortie

Je ne sais pas comment mettre en œuvre soit mais je suis d'accord que la première approche viole le modèle MVC.

Veuillez nous aviser.

Répondre

1

L'afficher comme %name% (%capacity% places) est simplement une représentation "possible" dans votre vue de formulaire, donc je déplacerais cette représentation très spécifique à votre type de formulaire.

Que peut appartenir à la méthode __toString() de votre Lieu entité:

class Venue 
{ 
    private $name; 

    ... setter & getter method 

    public function __toString() 
    { 
     return $this->getName(); 
    } 
} 

messages.en.yml:

my_translation: %name% (%capacity% places) 

Suivant votre Type de formulaire en utilisant choice_label (également à savoir: choice_translation_domain):

use Symfony\Component\Translation\TranslatorInterface; 

class YourFormType extends AbstractType 
{ 
    private $translator; 

    public function __construct(TranslatorInterface $translator) 
    { 
     $this->translator = $translator; 
    } 

    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add(
       'venue', 
       EntityType::class, 
       array(
        'choice_label' => function (Venue $venue, $key, $index) { 
         // Translatable choice labels 
         return $this->translator->trans('my_translation', array(
          '%name%' => $venue->getName(), 
          '%capacity%' => $venue->getCapacity(), 
         )); 
        } 
       ) 
      ); 
    } 

} 

& enregistrer également votre type de formulaire en tant que service dans services.yml:

your_form_type: 
    class: Your\Bundle\Namespace\Form\YourFormType 
    arguments: ["@translator"] 
    tags: 
    - { name: form.type } 
+0

Et cela va dans EasyAdmin comment? – rishta