Eccube\Form\Type\Admin\ShippingType::buildForm PHP Метод

buildForm() публичный Метод

public buildForm ( Symfony\Component\Form\FormBuilderInterface $builder, array $options )
$builder Symfony\Component\Form\FormBuilderInterface
$options array
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $app = $this->app;
        $config = $app['config'];
        $BaseInfo = $app['eccube.repository.base_info']->get();
        $builder->add('name', 'name', array('required' => false, 'options' => array('constraints' => array(new Assert\NotBlank()))))->add('kana', 'kana', array('required' => false, 'options' => array('constraints' => array(new Assert\NotBlank()))))->add('company_name', 'text', array('label' => '会社名', 'required' => false, 'constraints' => array(new Assert\Length(array('max' => $config['stext_len'])))))->add('zip', 'zip', array('required' => false, 'options' => array('constraints' => array(new Assert\NotBlank()))))->add('address', 'address', array('required' => false, 'pref_options' => array('constraints' => array(new Assert\NotBlank())), 'addr01_options' => array('constraints' => array(new Assert\NotBlank(), new Assert\Length(array('max' => $config['mtext_len'])))), 'addr02_options' => array('required' => false, 'constraints' => array(new Assert\NotBlank(), new Assert\Length(array('max' => $config['mtext_len']))))))->add('tel', 'tel', array('required' => false, 'options' => array('constraints' => array(new Assert\NotBlank()))))->add('fax', 'tel', array('label' => 'FAX番号', 'required' => false))->add('Delivery', 'entity', array('required' => false, 'label' => '配送業者', 'class' => 'Eccube\\Entity\\Delivery', 'property' => 'name', 'empty_value' => '選択してください', 'empty_data' => null, 'constraints' => array(new Assert\NotBlank())))->add('shipping_delivery_date', 'date', array('label' => 'お届け日', 'placeholder' => '', 'format' => 'yyyy-MM-dd', 'required' => false))->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use($BaseInfo) {
            if ($BaseInfo->getOptionMultipleShipping() == Constant::ENABLED) {
                $form = $event->getForm();
                $form->add('ShipmentItems', 'collection', array('type' => 'shipment_item', 'allow_add' => true, 'allow_delete' => true, 'prototype' => true));
            }
        })->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
            /** @var \Eccube\Entity\Shipping $data */
            $data = $event->getData();
            /** @var \Symfony\Component\Form\Form $form */
            $form = $event->getForm();
            if (is_null($data)) {
                return;
            }
            $Delivery = $data->getDelivery();
            // お届け時間を配送業者で絞り込み
            $form->add('DeliveryTime', 'entity', array('label' => 'お届け時間', 'class' => 'Eccube\\Entity\\DeliveryTime', 'property' => 'delivery_time', 'empty_value' => '指定なし', 'empty_data' => null, 'required' => false, 'query_builder' => function (EntityRepository $er) use($Delivery) {
                return $er->createQueryBuilder('dt')->where('dt.Delivery = :Delivery')->setParameter('Delivery', $Delivery);
            }));
        })->addEventListener(FormEvents::PRE_SUBMIT, function (FormEvent $event) use($app) {
            $data = $event->getData();
            $form = $event->getForm();
            if (!$data) {
                return;
            }
            $value = $data['Delivery'];
            if (empty($value)) {
                $value = 0;
            }
            $Delivery = $app['eccube.repository.delivery']->find($value);
            // お届け時間を配送業者で絞り込み
            $form->add('DeliveryTime', 'entity', array('label' => 'お届け時間', 'class' => 'Eccube\\Entity\\DeliveryTime', 'property' => 'delivery_time', 'empty_value' => '指定なし', 'empty_data' => null, 'required' => false, 'query_builder' => function (EntityRepository $er) use($Delivery) {
                return $er->createQueryBuilder('dt')->where('dt.Delivery = :Delivery')->setParameter('Delivery', $Delivery);
            }));
        })->addEventListener(FormEvents::POST_SUBMIT, function (FormEvent $event) use($BaseInfo) {
            if ($BaseInfo->getOptionMultipleShipping() == Constant::ENABLED) {
                $form = $event->getForm();
                $shipmentItems = $form['ShipmentItems']->getData();
                if (empty($shipmentItems) || count($shipmentItems) < 1) {
                    // 画面下部にエラーメッセージを表示させる
                    $form['shipping_delivery_date']->addError(new FormError('商品が追加されていません。'));
                }
            }
        });
    }