J'essaie de trouver l'option de travail la plus réutilisable pour pouvoir traduire à partir d'un FormType.Injection du service Translator vers FormType
Ma première option est de déclarer un service spécifiquement pour chaque FormType cette façon:
services.yml
form.enquiry:
class: Acme\DemoBundle\Form\EnquiryType
arguments: [@translator]
EnquiryType.php
use Symfony\Component\Translation\Translator;
class EnquiryType extends AbstractType {
public $translator;
public function __construct(Translator $translator=null)
{
$this->translator = $translator;
}
public function buildForm(FormBuilderInterface $builder, array $options) {
$tr= $this->translator;
$msg=$tr->trans('default_error');
$builder->add ...
MyController.php
$form = $this->container->get('form.enquiry')->create();
return $this->render('AcmeDemoBundle:Home:index.html.twig', array(
'form' => $form->createView()
));
donne cette erreur
FatalErrorException: Error: Call to undefined method Acme\DemoBundle\Form\EnquiryType::create()
J'aimerais savoir à chaud pour le résoudre en changeant le code ou même trouver mieux une meilleure option qui me permet d'injecter le service de traducteur à tout FormType sans avoir besoin de déclarer chaque FormType service individuellement.
Le buildForm() a bien sûr les lignes $ builder-> add, juste omis sur le code car il n'y avait pas de pertinence pour ce problème. Alors comment devrait être le service.yml et l'utilisation & _construit de l'enquiryType? –
Si vous avez des champs définis dans 'formBuilder', supprimez' create' et le constructeur devrait ressembler à 'public function __construct (TranslatorInterface $ translator = null)' –
Fait comme suggéré, mais obtenez cette erreur: Appel à la méthode indéfinie Acme \ DemoBundle \ Form \ EnquiryType :: createView(). De l'autre côté, je reçois une valeur nulle pour $ translator, devrais-je changer services.yml aussi? –