Symfony,在handleRequest之后,有些字段仍然是空白的。

问题描述 投票:0回答:1

我正在学习如何使用symfony,我的问题是,当我想使用handleRequest函数时,它没有验证我的电子邮件和消息字段,但它对名字字段是好的。

请看下面的代码。

Contact.php实体

<?php

namespace App\Entity;
use Symfony\Component\Validator\Constraints as Assert;

class Contact
{
    /**
    * @Assert\NotBlank
    */
    private $name;

    /**
    * @Assert\NotBlank
    */
    private $email;

    /**
    * @Assert\NotBlank
    */
    private $message;

    public function getName()
    {
        return $this->name;
    }

    public function getEmail()
    {
        return $this->email;
    }

    public function getMessage()
    {
        return $this->message;
    }

    public function setName($name)
    {
        $this->name = $name;
    }

    public function setEmail($email)
    {
        $this->name = $email;
    }

    public function setMessage($message)
    {
        $this->name = $message;
    }
}

?>

BlogController.php

<?php

namespace App\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use App\Entity\Article;
use App\Entity\Contact;
use App\Repository\ArticleRepository;
use Symfony\Component\Form\Extension\Core\Type\TextType;
use Symfony\Component\Form\Extension\Core\Type\TextareaType;
use Symfony\Component\Form\Extension\Core\Type\EmailType;
use Symfony\Component\HttpFoundation\Request;

class BlogController extends Controller
{
    /**
     * @Route("/blog", name="blog")
     */
    public function blog(ArticleRepository $repo)
    {

        $articles = $repo->findAll();

        return $this->render('blog/index.html.twig', [
            'controller_name' => 'BlogController',
            'articles' => $articles
        ]);
    }

    /**
    *   @Route("/", name="blog_home")
    */
    public function home()
    {
        return $this->render('blog/home.html.twig');
    }

    /**
    *   @Route("/blog/articles/{id}", name="blog_show")
    */
    public function show(Article $article)
    {
        return $this->render('blog/show.html.twig',[
            'article' => $article
            ]);
    }

    /**
    *   @Route("/contact", name="blog_contact")
    */
    public function contact(Request $request)
    {
        $contact = new Contact; /* Create the new contact object */

        $form = $this->createFormBuilder($contact) /* Creating the form */
            ->add('name', TextType::class)
            ->add('email', TextType::class)
            ->add('message', TextareaType::class)
            ->getForm();
            dump($contact);
        $form->handleRequest($request);
        dump($contact);
        if($form->isSubmitted() && $form->isValid())
        {

            return $this->redirectToRoute('blog_home');
        }
        dump($request);
        return $this->render('blog/contact.html.twig',[
            'form' => $form->createView()
        ]);
    }
}

联系我们.html.twig

{% extends 'base.html.twig' %}

{% block title %}BLOG - Contact{% endblock %}

{% block body %}
<h2>Me contacter !</h1>
<div class="row"> 
   <div class="col-md-5">
      {{ form_start(form) }}
         <label>Nom:</label>
         {{ form_widget(form.name) }}
         <label>Email:</label>
         {{ form_widget(form.email) }}
         <label>Message:</label>
         {{ form_widget(form.message) }}
         <br>
         <button type="submit" class="btn btn-info">Envoie</button>
      {{ form_end(form) }}
   </div>
   <div class="col-md-1">
   </div>
   <div class="col-md-6">
      <div class="card border-info mb-1" style="max-width: 20rem;">
         <div class="card-header">Twitter: @Fergvae</div>
         </div>
      <div class="card border-dark mb-1" style="max-width: 20rem;">
         <div class="card-header">Discord: Fergvae#0730</div>
         </div>
      <div class="card border-danger mb-1" style="max-width: 20rem;">
         <div class="card-header">Youtube: Fergvae</div>
         </div>
   </div>
 </div>
{% endblock %}

唯一不行的是handleRequest,所以我做了多个dump。

你也可以看一下转储的内容,第一个是在 handle 之前,第二个是在 handle 之后。转储的symfony内容

感谢所有回答这个问题的人!我正在学习如何使用symfony。

php symfony
1个回答
0
投票

好吧,我的错,我只是忘了当我复制粘贴改变^this->名称在de设置器!。请原谅我的打扰


0
投票

很高兴你已经找到了解决方案,但是为了以防万一。

如果使用类,更好的做法是使用FormType,在那里你可以声明你的类在哪些字段上应该自动创建表单。这样Symfony就会自动抓取所有需要的字段,并为你创建表单,减少代码的编写等等。或者你也可以创建一个自定义表单,并定义所有你需要的字段,包括不为空等限制。

综上所述,如果可能的话,尽量少在控制器中保留逻辑,并将其深入。

最新问题
© www.soinside.com 2019 - 2024. All rights reserved.