Symfony, некоторые поля остаются пустыми после handleRequest - PullRequest
0 голосов
/ 25 апреля 2020

Я изучаю, как вы используете symfony, и моя проблема в том, что когда я хочу использовать функцию handleRequest, она не проверяет поле сообщения электронной почты и сообщений, но подходит для поля имени.

Посмотрите код:

Контакт. 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()
        ]);
    }
}

contact. 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, поэтому я сделал несколько дампов.

вы также можете просмотреть выгруженный контент, первый - перед дескриптором, а второй - после. Сброс symfony содержание

Спасибо всем, кто ответит на этот вопрос!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2020

Хорошо, что вы нашли свое решение, но на всякий случай:

Если вы используете классы, лучше использовать FormType, там вы можете объявить свой класс, в каких полях форма должна быть автоматически создан. Который Symfony автоматически перехватит все необходимые поля и создаст для вас форму, без написанного кода и т. Д. c. Или вы можете создать пользовательскую форму и определить все необходимые поля, включая ограничения как не пустые и т. Д. c ..

Чтобы подвести итог, по возможности, сохраняйте как можно меньше логических значений c в контроллеры, насколько это возможно, и перемещайте их глубже.

0 голосов
/ 25 апреля 2020

Хорошо, плохо, я просто забываю, когда копирую прошлое, чтобы изменить имя ^ this-> в настройщиках! Извините за беспокойство

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...