I de olduğu gibi string
yöntem createForm
geçmesi gereken symfony3 olarakSymfony3 setAction FormType
// MyController.php
$formType = new MyFormType($this->container);
$form = $this->createForm($formType);
// MyFormType.php
protected $container;
public function __construct(ContainerInterface $container)
{
$this->container = $container;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->setAction($this
->container
->get('router')
->generate('myAction')
);
// ...
}
}
dönmesini mümkün, bu yüzden güvenilir
MyFormType
için kontrolör veya yönlendirici geçmek mümkün değil FormType'ı bir hizmet olarak tanımlamak, ancak davranışı değiştirmez.
MyFormType
'da eylemi nasıl ayarlayabilirim (MyController
'da değil)?
// MyController.php
$this->createForm(MyFormType::class, null, ['router' => $this->get('router')]);
// MyFormType.php
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->setAction($options['router']->generate('myAction'));
// ...
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'router' => null,
// ...
]);
}
Ama bu çözüm benim için biraz çirkin görünüyor:
Form türünü nasıl bir hizmet olarak tanımladığınızı gösterin. Yönelticiyi sorun olmadan enjekte edebilmelisiniz. – Cerad
Evet, yönlendiriciyi sorun çıkarmadan enjekte ettim, ama bana öyle geliyor ki bu symfony, 'new FormType' biçiminde form hizmeti yaratıyor ('createForm' yöntemini kullanırken). Bu yüzden FormType'daki kurucum, herhangi bir paramız olmadan çağrılır. – Eddie
Hayır. Form türünüzü bir hizmet olarak uygun şekilde tanımladıysanız, createForm işlevi onu kapsayıcıdan çeker. Çalışmanızı dikkatlice kontrol edin. Hizmet tanımlarınızın kapsayıcı: debug kullanılarak yüklendiğinden emin olun. Çalışacağına söz veriyorum. – Cerad