使用Command not Entity

时间:2017-11-25 21:58:50

标签: php forms symfony validation command

我准备了一个简单的应用程序,使用symfony3.2并使用DDD(至少我试过)。但我在验证ProductType表单时遇到问题,该表单使用Product对象的NewProductCommand instad。 我的表格是:

<?php
namespace AdminBundle\Form;
use Shop\Domain\Command\NewProductCommand;
use AppBundle\Form\PriceType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
use Symfony\Component\Form\Extension\Core\Type\NumberType;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\DataMapperInterface;
use Symfony\Component\Validator\Constraints\Length;
use Symfony\Component\Validator\Constraints\NotBlank;
/**
 * Product add form
 *
 * @package AdminBundle\Form
 */
class ProductType extends AbstractType
{
    /**
     * Building form
     *
     * @param FormBuilderInterface $builder
     * @param array                $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add(
                'name',
                TextType::class,
                array(
                    'required' => true,
                    'label' => 'Nazwa',
//                    'constraints' => [new NotBlank(), new Length(['max' => 255])],
                )
            )
            ->add(
                'description',
                TextareaType::class,
                array(
                    'required' => true,
                    'label' => 'Opis',
                    'attr' => [
                        'rows' => 10
                    ],
//                    'constraints' => [new Length(['min' => 100, 'max' => 65000])],
                )
            )
            ->add(
                'price',
                PriceType::class,
                array(
                    'required' => true,
                    'label' => 'Cena'
                )
            );
    }
    /**
     * Options configuration
     *
     * @param OptionsResolver $resolver
     */
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(
            array(
                'data_class' => NewProductCommand::class
            )
        );
    }
    /**
     * Return form name
     *
     * @return string
     */
    public function getName()
    {
        return 'product';
    }
}

在控制器中我有:

    $command = new NewProductCommand();
    $form = $this->createForm(ProductType::class, $command);
    $form->handleRequest($request);
    if ($form->isSubmitted() && $form->isValid()) {

当我删除注释约束时验证有效,但我想要实现的是表单使用我的Product类验证器。

我认为问题在于,我传递的是NewProductCommand :: class,而不是Product :: class,所以表单对Product class(在doctrine orm产品映射中定义)一无所知: https://github.com/wojto/washop/blob/master/src/Shop/Infrastructure/Repository/Doctrine/config/mapping/Product.orm.yml)和验证,也是yml(https://github.com/wojto/washop/blob/master/src/AdminBundle/Resources/config/validation.yml)。

在哪里,我应该将NewProductCommand与Product类连接,以便表单可以对Product类使用验证?

我希望,我明确表示;)完整的应用代码在这里:https://github.com/wojto/washop/

也许我做错了什么,所以我感谢任何帮助:)

0 个答案:

没有答案