src/FMT/Application/FormType/PaymentType.php line 29

Open in your IDE?
  1. <?php
  2. /**
  3.  * Author: Anton Orlov
  4.  * Date: 06.04.2018
  5.  * Time: 18:51
  6.  */
  7. namespace FMT\Application\FormType;
  8. use FMT\Application\FormType\DataTransformer\PaymentProcessorTransformer;
  9. use FMT\Application\FormType\Subscribers\PaymentSubscriber;
  10. use Symfony\Component\Form\AbstractType;
  11. use Symfony\Component\Form\Extension\Core\Type\ButtonType;
  12. use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
  13. use Symfony\Component\Form\Extension\Core\Type\EmailType;
  14. use Symfony\Component\Form\Extension\Core\Type\HiddenType;
  15. use Symfony\Component\Form\Extension\Core\Type\SubmitType;
  16. use Symfony\Component\Form\Extension\Core\Type\TextType;
  17. use Symfony\Component\Form\FormBuilderInterface;
  18. use Symfony\Component\Validator\Constraints\Email;
  19. use Symfony\Component\Validator\Constraints\Length;
  20. use Symfony\Component\Validator\Constraints\NotBlank;
  21. /**
  22.  * Class PaymentType
  23.  * @package FMT\Application\FormType
  24.  * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
  25.  */
  26. class PaymentType extends AbstractType
  27. {
  28.     /** @var PaymentSubscriber */
  29.     private $subscriber;
  30.     /** @var PaymentProcessorTransformer */
  31.     private $transformer;
  32.     public function __construct(PaymentSubscriber $subscriberPaymentProcessorTransformer $transformer)
  33.     {
  34.         $this->subscriber $subscriber;
  35.         $this->transformer $transformer;
  36.     }
  37.     public function buildForm(FormBuilderInterface $builder, array $options)
  38.     {
  39.         $isCheckout $options["attr"]["data-checkout"] ?? false;
  40.         $builder->setMethod("POST");
  41.         $builder->add('email'EmailType::class, [
  42.             "label" => false,
  43.             "required" => false,
  44.             "attr" => [
  45.                 "placeholder" => "E-mail"
  46.             ],
  47.             "constraints" => [
  48.                 new NotBlank(),
  49.                 new Email()
  50.             ]
  51.         ]);
  52.         $builder->add('anonymous'ChoiceType::class, [
  53.             "data" => 1,
  54.             "choices" => ["fmt.payment_form.fields.anonymous" => 1"fmt.payment_form.fields.named" => 0],
  55.             "label" => false,
  56.             "multiple" => false,
  57.             "expanded" => true,
  58.         ]);
  59.         $builder->add('first_name'TextType::class, [
  60.             "label" => false,
  61.             "attr" => [
  62.                 "placeholder" => "fmt.payment_form.fields.first_name"
  63.             ],
  64.             "constraints" => [
  65.                 new NotBlank(),
  66.                 new Length([
  67.                     'min' => 2,
  68.                     'max' => 255
  69.                 ])
  70.             ]
  71.         ]);
  72.         $builder->add('last_name'TextType::class, [
  73.             "label" => false,
  74.             "attr" => [
  75.                 "placeholder" => "fmt.payment_form.fields.last_name"
  76.             ],
  77.             "constraints" => [
  78.                 new NotBlank(),
  79.                 new Length([
  80.                     'min' => 2,
  81.                     'max' => 255
  82.                 ])
  83.             ]
  84.         ]);
  85.         $builder->add('payment_amount'HiddenType::class, [
  86.             "constraints" => [
  87.                 new NotBlank()
  88.             ],
  89.             "empty_data" => 0,
  90.             "error_bubbling" => false
  91.         ]);
  92.         $builder->add('payment_processor'HiddenType::class, [
  93.             "constraints" => [
  94.                 new NotBlank(),
  95.             ]
  96.         ]);
  97.         $builder->add('cancel'ButtonType::class, [
  98.             "label" => "fmt.payment_form.buttons.cancel"
  99.         ]);
  100.         $builder->add('proceed'SubmitType::class, [
  101.             "label" => $isCheckout "fmt.payment_form.buttons.checkout" "fmt.payment_form.buttons.donate"
  102.         ]);
  103.         $builder->get("payment_processor")->addModelTransformer($this->transformer);
  104.         $builder->addEventSubscriber($this->subscriber);
  105.     }
  106. }