Symfony 4:Handelrequest没有获得任何提交的数据



我尝试从一个方形提交数据,将它们发送到post var,而不是通过handlequest()方法来缓存。我试图显示潜在的验证器错误,但没有任何错误。Rebug相同:路由器和方形错误捕获。

addarticleController

class AddArticleController extends AbstractController
{
    /**
     * @Route("/ajouter" , name="_add")
     * @param Environment $environment
     * @return Response
     * @throws Twig_Error_Loader
     * @throws Twig_Error_Runtime
     * @throws Twig_Error_Syntax
     */
    public function index()
    {
        return $this->render('add_article/AddArticle.html.twig', [
            'controller_name' => 'AddArticleController',
        ]);
    }
    /**
     * @param Request $request
     * @return Response
     */
    public function addCompanie(ValidatorInterface $validator,Request $request){
        //On submit, data are in POST var, but not submited
        $companie = new Companies();
        $form = $this->createForm(AddCompanieType::class, $companie);
        $form->handleRequest($request);
        //displaying validator errors
        $errors = $validator->validate($companie);
        if (count($errors) > 0) {
            /*
             * Uses a __toString method on the $errors variable which is a
             * ConstraintViolationList object. This gives us a nice string
             * for debugging.
             */
            $errorsString = (string) $errors;
            return new Response($errorsString);
        }
        if($form->isSubmitted() && $form->isValid()){
            $companie = $form->getData();
            echo 'ok';
        }
        return $this->render('form/AddCompanie.html.twig', array(
            'formCompanie' => $form->createView(),
        ));
    }
}

addcompanietype

class AddCompanieType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('companie_name',
                TextType::class, [
                    'label'=>'Nom de l'Entreprise',
                    'attr'=>[
                        'pattern' => '[A-Za-z&]{1,}',
                        'class'=>'form-control'
                    ]
                ])
            ->add('Adress',
                TextType::class, [
                'label'=>'Adresse',
                'attr'=>[
                    'pattern' => '^d{1,2}([- ]?[A-Za-z]){1,}([ ]?)$',
                    'class'=>'form-control'
                    ]
                ])
            ->add('postal_code',
                TextType::class, [
                    'label'=>'Code postal'
                    , 'attr'=>[
                        'pattern' => 'd{5}',
                        'class'=>'form-control'
                    ]
                ])
            ->add('City',
                TextType::class,  [
                    'label'=>'Ville',
                    'attr'=>[
                        'pattern' => '^[A-Z]([- ]?[A-Za-z]){1,}',
                        'class'=>'form-control'
                    ]
                ])
            ->add('phone_number',
                TelType::class, [
                    'label'=>'Téléphone Fixe',
                    'required'   => false,
                    'attr'=>[
                        'pattern' => '^0[1-68]([-. ]?d{2}){4}$',
                        'class'=>'form-control'
                    ]
                ])
            ->add('turnover',
                IntegerType::class, [
                    'label'=>'Chiffre d'Affaire',
                    'required'   => false,
                    'attr'=>[
                        'pattern' => '',
                        'class'=>'form-control'
                    ]
                ])
            ->add('social_reason',
                TextType::class, [
                    'label'=>'Raison Social',
                    'attr'=>[
                        'pattern' => '[A-Za-z&]{1,}',
                        'class'=>'form-control'
                    ]
                ]);
    }
    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => Companies::class,
        ]);
    }
}

公司

/**
 * @ORMEntity(repositoryClass="AppRepositoryCompaniesRepository")
 */
class Companies
{
    /**
     * @ORMId()
     * @ORMGeneratedValue()
     * @ORMColumn(type="integer")
     */
    private $id;
    /**
     * @ORMColumn(type="string", length=255)
     * @ValidatorRegex("/[A-Za-z&]{1,}/")
     */
    private $companie_name;
    /**
     * @ORMColumn(type="integer", nullable=true)
     */
    private $nb_projects;
    /**
     * @ORMColumn(type="string", length=255)
     *  @ValidatorRegex("/^[A-Z]([- ]?[A-Za-z]){1,}/")
     */
    private $City;
    /**
     * @ORMColumn(type="string", length=255)
     * @ValidatorRegex("/^d{1,2}[A-Za-z]/")
     */
    private $Adress;
    /**
     * @ORMColumn(type="string", length=5)
     * @ValidatorLength(
     *     min = 5,
     *     max = 5,
     *     minMessage = "Un numéro de téléphone doit être composé de {{ limit }} chiffres : trop court",
     *     maxMessage = "Un numéro de téléphone doit être composé de {{ limit }} chiffres : trop long"
     * )
     * @ValidatorRegex("/d{5}/")
     */
    private $postal_code;
    /**
     * @ORMColumn(type="string", length=10, nullable=true)
     * @ValidatorLength(
     *     min = 10,
     *     max = 10,
     *     minMessage = "Un numéro de téléphone doit être composé de {{ limit }} chiffres : trop court",
     *     maxMessage = "Un numéro de téléphone doit être composé de {{ limit }} chiffres : trop long"
     * )
     * @ValidatorRegex("/^0[1-68]([-. ]?d{2}){4}$/")
     */
    private $phone_number;
    /**
     * @ORMColumn(type="integer", nullable=true)*
     * @ValidatorType(
     *     "integer",
     *     message="La valeur {{ value }} n'est pas un nombre)"
     * )
     */
    private $turnover;
    /**
     * @ORMColumn(type="string", length=255)
     * @ValidatorType("string")
     * @ValidatorRegex("/[A-Za-z&]{1,}/")
     */
    private $social_reason;
    /**
     * @ORMColumn(type="integer", nullable=true)
     */
    private $effective;

    /**
     * @ORMManyToMany(targetEntity="Project", mappedBy="companies")²
     */
    private $projects;
    public function __construct()
    {
        $this->projects = new ArrayCollection();
    }
    public function __toString()
    {
        return '';
    }
    public function getId(): ?int
    {
        return $this->id;
    }
    public function getCompanieName(): ?string
    {
        return $this->companie_name;
    }
    public function setCompanieName(string $companie_name): self
    {
        $this->companie_name = $companie_name;
        return $this;
    }
    public function getNbProjects(): ?int
    {
        return $this->nb_projects;
    }
    public function setNbProjects(?int $nb_projects): self
    {
        $this->nb_projects = $nb_projects;
        return $this;
    }
    public function getCity(): ?string
    {
        return $this->City;
    }
    public function setCity(string $City): self
    {
        $this->City = $City;
        return $this;
    }
    public function getAdress(): ?string
    {
        return $this->Adress;
    }
    public function setAdress(string $Adress): self
    {
        $this->Adress = $Adress;
        return $this;
    }
    public function getPostalCode(): ?int
    {
        return $this->postal_code;
    }
    public function setPostalCode(int $postal_code): self
    {
        $this->postal_code = $postal_code;
        return $this;
    }
    public function getPhoneNumber(): ?int
    {
        return $this->phone_number;
    }
    public function setPhoneNumber(?int $phone_number): self
    {
        $this->phone_number = $phone_number;
        return $this;
    }
    public function getTurnover(): ?int
    {
        return $this->turnover;
    }
    public function setTurnover(?int $turnover): self
    {
        $this->turnover = $turnover;
        return $this;
    }
    public function getSocialReason(): ?string
    {
        return $this->social_reason;
    }
    public function setSocialReason(string $social_reason): self
    {
        $this->social_reason = $social_reason;
        return $this;
    }
    public function getEffective(): ?int
    {
        return $this->effective;
    }
    public function setEffective(?int $effective): self
    {
        $this->effective = $effective;
        return $this;
    }
}

addcompanie(template)

{{ form_start(formCompanie) }}
    {{ form_widget(formCompanie) }}
    <input type="submit" class="btn btn-dark" value="Ajouter" />
{{ form_end(formCompanie) }}

我真的不知道在哪里搜索。我检查了Symfony日志,但与此格式无关。

编辑

addarticle(模板)

{% extends 'layout.html.twig' %}
{% block title %}
    {{ parent() }}Ajouter
{% endblock %}
{% block content %}
    {{ render(controller('App\Controller\AddArticleController::addCompanie')) }}
{% endblock %}

解决方案

我倾倒了整个$请求变量,我注意到请求的方法是获取的,而不是发布。这是由于在辅助模板中调用控制器方法的渲染。原因是Symfony是通过Get方法来调用渲染函数,而不是通过Post方法来调用handlerequest。

为什么getMethod()返回"获取"而不是" post"?

您能在页面中显示表单的渲染吗?由于无效的动作值,因此表格不可能达到控制器的正确函数。

确保您已经配置了表单方法,handleRequest如果方法不匹配

,则丢弃任何请求

相关内容

最新更新