форма, которая остается нулевой symfony - PullRequest
1 голос
/ 20 февраля 2020

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

Также это symfony 4.4 и я Вы уже проверили запрос findWeeklyPlanningRs в репозитории, и он работает нормально.

это сущность:


<?php

namespace App\Entity ;

class FilterWeek
{

  private $nbWeek ;


      public function getNbWeek(): ?int
      {
          return $this-> nbWeek;
      }

      public function setNbWeek(int $nbWeek): self
      {
          $this->$nbWeek = $nbWeek;

          return $this;
      }

}

Контроллер

  /**
        * @Route("/{id}/week" ,  name="week")
        */

        public function weeklyPlanning(Request $request ,  $id ) : Response
        {

          $em = $this->getDoctrine()->getManager();

          $week = new FilterWeek();

          $form = $this -> createForm(FilterWeekType::class , $week ) ;
          $form->handleRequest($request);





          $planning = $em -> getRepository(Chargement::class) -> findWeeklyPlanningRs($id , $week-> getNbWeek()  ) ;

          $responsableSecteur = $em ->getRepository(ResponsableSecteur::class)->find($id) ;



          return $this -> render('Planing/ResponsableSecteurWeek.html.twig' , [
            'responsable_secteur' => $responsableSecteur,
            'chargements' => $planning ,
            'form' => $form -> createView()
            ] );

        }

форма:


<?php

namespace App\Form;

use App\Entity\FilterWeek;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\IntegerType;

class FilterWeekType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('nbWeek' , IntegerType::class , [

              'label' => 'numéro de la semaine' ,
              'required' => false
            ])
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults([
            'data_class' => FilterWeek::class,
            'method' => 'get',
            'csrf_protection' => false,
        ]);
    }

    public function getBlockPrefix(){

      return '';
    }
}

вид:

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

{% block body %}

  <div class="container">

    <h3>Planning des chargements par Semaine</h3>

    <br><br>

    <div class="form-row" >
      <div class="col-4">
        {{ form_start(form) }}
          {{ form_row(form.nbWeek) }}
            <button class="btn color-br"  style="top : 5em;" >Rechercher</button>

        {{ form_end(form) }}
      </div>

Ответы [ 2 ]

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

Наконец я нашел ответ на проблему:

Объяснение:

В контроллере

мне пришлось использовать параметр запроса ($ request). и получить параметры, переданные в метод get:

, и вы должны быть осторожны, потому что результатом метода get является строка символов ...

$value = $request -> get('parameter')

, например, в моем в этом случае это выглядит следующим образом:

$nb_week = $request->get('nbWeek')

и поскольку результатом является строка символов, мы применяем метод intval, чтобы он был целым числом.

$nb_week = intval( $request->get('nbWeek')  ) ;

0 голосов
/ 20 февраля 2020

Ваша сущность в настоящее время не завершена. Лучше использовать php bin/console make:entity для генерации сущности, потому что она генерирует $id и хранилище автоматически. Также вам нужны аннотации для обозначения типа nbWeek. Таким образом, сущность должна выглядеть так:

<?php

namespace App\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity(repositoryClass="App\Repository\FilterWeekRepository")
 */
class FilterWeek
{
    /**
     * @ORM\Id()
     * @ORM\GeneratedValue()
     * @ORM\Column(type="integer")
     */
    private $id;

    /**
     * @ORM\Column(type="integer")
     */
    private $nbWeek;

    public function getId(): ?int
    {
        return $this->id;
    }

    public function getNbWeek(): ?int
    {
        return $this->nbWeek;
    }

    public function setNbWeek(int $nbWeek): self
    {
        $this->nbWeek = $nbWeek;

        return $this;
    }
}

Код контроллера, который вы публикуете, в настоящее время неполон. Но я думаю, вам нужно добавить следующие строки в $responsableSecteur = $em->getRepository(ResponsableSecteur::class)->find($id);:

$filterWeek = new FilterWeek();
$filterWeek->setNbWeek($request->get('nbWeek'));
$em->persist($filterWeek);
$em->flush();

. Он создает объект FilterWeek и помещает его в базу данных. Убедитесь, что вы создали таблицу в базе данных.

Форма и шаблон выглядят хорошо. По крайней мере, мне не нужно было улучшать их, прежде чем они начали работать.

...