Php 保持为空的窗体symfony

Php 保持为空的窗体symfony,php,forms,symfony,symfony4,php-7,Php,Forms,Symfony,Symfony4,Php 7,我用一个手工制作的实体设置了一个搜索表单,但是表单没有将信息传递给实体。。。你有办法解决这个问题吗 它也是symfony 4.4,我已经检查了存储库中的findWeeklyPlanningRs查询,它运行良好 这是实体: <?php namespace App\Entity ; class FilterWeek { private $nbWeek ; public function getNbWeek(): ?int { retu

我用一个手工制作的实体设置了一个搜索表单,但是表单没有将信息传递给实体。。。你有办法解决这个问题吗

它也是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;
      }

}
表格:


<?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 '';
    }
}



您的实体当前不完整。最好使用
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;
    }
}
它创建FilterWeek的对象并将其推送到数据库中。确保已在数据库中创建表


表单和模板看起来不错。至少,在它开始工作之前,我不需要改进它们。

您的实体当前不完整。最好使用
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;
    }
}
它创建FilterWeek的对象并将其推送到数据库中。确保已在数据库中创建表


表单和模板看起来不错。至少,在它开始工作之前,我不需要改进它们。

最后我找到了问题的答案:

说明:

在控制器中

  /**
        * @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()
            ] );

        }

我必须使用request参数($request)。 并检索在get方法中传递的参数:

您必须小心,因为get方法的结果是一个字符串

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

例如,在我的例子中,它看起来像:

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

由于结果是一个字符串,我们应用了intval方法,因此它是一个整数

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


最后我找到了问题的答案:

说明:

在控制器中

  /**
        * @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()
            ] );

        }

我必须使用request参数($request)。 并检索在get方法中传递的参数:

您必须小心,因为get方法的结果是一个字符串

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

例如,在我的例子中,它看起来像:

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

由于结果是一个字符串,我们应用了intval方法,因此它是一个整数

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


单击
Rechercher
按钮时的输出是什么?是的,Khaled Alam确切地说,单击
Rechercher
按钮时的输出是什么?是的,Khaled Alam确切地说,非常感谢您的回答,但此表单不是直接向数据库发送信息的表单。。。这是一个搜索表单,所以。。。它从另一个实体检索信息。所以我想没有必要使用磁共振成像。我在这篇文章中没有看到其他实体。对不起,我不知道怎么对付他们。如果你也发布它们就好了。事实上,问题中没有其他实体。。。事实上,Filterweek实体是一个“假”实体,能够在另一个实体的字段上创建搜索表单。。。因此,它不能直接链接到数据库,因为没有引用它的表…非常感谢您的回答,但此表单不是直接向数据库发送信息的表单。。。这是一个搜索表单,所以。。。它从另一个实体检索信息。所以我想没有必要使用磁共振成像。我在这篇文章中没有看到其他实体。对不起,我不知道怎么对付他们。如果你也发布它们就好了。事实上,问题中没有其他实体。。。事实上,Filterweek实体是一个“假”实体,能够在另一个实体的字段上创建搜索表单。。。所以它不能直接链接到数据库,因为没有引用它的表。。。