Sto cercando di trovare l'opzione di lavoro più riutilizzabile per essere in grado di tradurre da un FormType.Injectioning Translator service to FormType
La mia prima opzione è quella di dichiarare un servizio specifico per ogni FormType questo modo:
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()
));
dà questo errore
FatalErrorException: Error: Call to undefined method Acme\DemoBundle\Form\EnquiryType::create()
mi piacerebbe sapere a caldo di risolverlo modificando il codice o meglio ancora trovare una soluzione migliore che mi permette di iniettare il servizio di traduttore per qualsiasi FormType senza bisogno di dichiarare ogni Servizio FormType individualmente.
Il buildForm() ha ovviamente $ builder-> aggiungi righe, semplicemente omesse nel codice in quanto non pertinenti per questo problema. Quindi, come dovrebbero essere i servizi.yml e l'uso di & _construct dall'enquiryType? –
Se hai campi definiti in 'formBuilder' cancella' create' e constructor dovrebbe apparire come 'public function __construct (TranslatorInterface $ translator = null)' –
Fatto come suggerito ma poi ottenere questo errore: Call to undefined method Acme \ DemoBundle \ Form \ EnquiryType :: createView(). Dall'altro lato sto ottenendo un valore nullo per $ translator, dovrei cambiare anche services.yml? –