У меня 3 файла:
Первый:
public function register(\Pimple\Container $app) { $app['manager.form'] = function() use ($app) { return new Form($app); }; }
Во-вторых:
class Form { private $form; public function __construct(Application $app) { $this->form = $app['form.factory']->createBuilder(FormType::class); } public function addDuree() { $this->form->add('duree', ChoiceType::class, [ 'choices' => [ '1' => '1', '3' => '3', '6' => '6', '12' => '12' ], 'multiple' => false, 'expanded' => true, 'data' => 1 ]); } public function addPaiementType() { $this->form->add('paiementType', ChoiceType::class, [ 'choices' => [ 'virement' => 'virement', 'cheque' => 'cheque', 'paypal' => 'paypal', 'paypal-cb' => 'paypal-cb' ], 'multiple' => false, 'expanded' => true, 'data' => 'virement' ]); } public function addTermsAccepted() { $this->form->add('termsAccepted', CheckboxType::class, [ 'mapped' => false, 'constraints' => new Assert\IsTrue(), ]); } public function getForm() { return $this->form->getForm(); } }
И контроллер:
$form = $app['manager.form']->addDuree()->addPaiementType()->addTermsAccepted();
Но Силекс дал мне ошибку:
Call to a member function addPaiementType() on null
Я не понимаю, почему. Для меня эта структура кода эквивалентна:
$form = $app['form.factory']->createBuilder(FormType::class) ->add('duree', ChoiceType::class, [ 'choices' => [ '1' => '1', '3' => '3', '6' => '6', '12' => '12' ], 'multiple' => false, 'expanded' => true, 'data' => 1 ]) ->add('paiementType', ChoiceType::class, [ 'choices' => [ 'virement' => 'virement', 'cheque' => 'cheque', 'paypal' => 'paypal', 'paypal-cb' => 'paypal-cb' ], 'multiple' => false, 'expanded' => true, 'data' => 'virement' ]) ->add('termsAccepted', CheckboxType::class, [ 'mapped' => false, 'constraints' => new Assert\IsTrue(), ]) ->getForm();
Но, похоже, не … Не знаю почему.
Спасибо за помощь