Bon dans la migration en 2.8 j'ai ce warning :
php.INFO: Passing type instances to FormBuilder::add(), Form::add() or the FormFactory is deprecated since version 2.8 and will not be supported in 3.0. Use the fully-qualified type class name instead
Voici mon code :
Controller :
1 2 3 4 5
|
$customer = new Customer();
$form = $this->get('customer.create.form');
$formHandler = $this->get('customer.create.handler');
$process = $formHandler->process($customer, $request); |
Service :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
|
parameters:
customer.form.class: Symfony\Component\Form\Form
customer.model.form_data_class: UserBundle\Form\Model\Customer
customer.form.type.create.class: UserBundle\Form\Type\CreateCustomerFormType
customer.handler.create.class: UserBundle\Form\Handler\CreateCustomerHandler
services:
customer.create.form:
class: %customer.form.class%
factory_service: form.factory
factory_method: createNamed
arguments:
- ""
- "@customer.create.form.type"
- null
- { validation_groups: [Default] }
customer.create.form.type:
class: %customer.form.type.create.class%
arguments: [ %customer.model.form_data_class%, "POST" ]
tags:
- { name: form.type }
customer.create.handler:
class: %customer.handler.create.class%
arguments: [@customer.create.form, @manager.customer] |
FormType:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
<?php
namespace UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
class CreateCustomerFormType extends AbstractType
{
protected $class;
public function __construct($class)
{
$this->class = $class;
}
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('society')
->add('address')
->add('zipCode')
->add('city')
->add('country')
->add('fax')
->add('phone')
->add('email')
->add('firstname')
->add('lastname')
->add('language', HiddenType::class)
;
}
public function configureOptions(OptionsResolver $resolver) {
$resolver->setDefaults(array(
'data_class' => $this->class,
'method' =>'POST',
'csrf_protection' => true
));
}
public function getName()
{
return $this->getBlockPrefix();
}
public function getBlockPrefix()
{
return 'customer';
}
} |
Mon service handler :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
<?php
namespace UserBundle\Form\Handler;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Form\FormInterface;
use UserBundle\Form\Model\Customer;
use UserBundle\ModelManager\CustomerManager;
class CreateCustomerHandler
{
protected $customerManager;
protected $form;
public function __construct(FormInterface $form, CustomerManager $customerManager)
{
$this->customerManager = $customerManager;
$this->form = $form;
}
public function process(Customer $customer, Request $request)
{
$process = false;
if ('POST' == $request->getMethod())
{
$this->form->setData($customer);
$this->form->handleRequest($request);
if ($this->form->isValid())
{
$this->onSuccess($customer);
$process = true;
}
else {
die('error');
}
}
return $process;
}
private function onSuccess(Customer $customer)
{
$this->customerManager->createCustomer($customer);
}
} |
Je ne comprend ce qu'il faut faire ... Je tourne en rond ...
Partager