保持为 null symfony 的形式
the form which remains null symfony
我用一个手工制作的实体设置了一个搜索表单,但该表单没有将信息传输给该实体...您有解决这个问题的想法吗?
它也是 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>
您的实体目前不完整。最好使用 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;
}
}
您post的控制器代码目前不完整。但我认为你需要在 $responsableSecteur = $em->getRepository(ResponsableSecteur::class)->find($id);
下添加以下行:
$filterWeek = new FilterWeek();
$filterWeek->setNbWeek($request->get('nbWeek'));
$em->persist($filterWeek);
$em->flush();
它创建了FilterWeek 的对象并将其推送到数据库中。确保您已经在数据库中创建了 table。
表单和模板看起来不错。至少,我不需要改进它们就可以开始工作了。
终于找到了问题的答案:
解释:
在控制器中
我不得不使用请求参数($request)。
并检索在 get 方法中传递的参数:
而且你要小心,因为get方法的结果是一串字符...
$value = $request -> get('parameter')
例如在我的例子中它看起来像:
$nb_week = $request->get('nbWeek')
由于结果是一串字符,我们应用了 intval 方法,因此它是一个整数。
$nb_week = intval( $request->get('nbWeek') ) ;
我用一个手工制作的实体设置了一个搜索表单,但该表单没有将信息传输给该实体...您有解决这个问题的想法吗?
它也是 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>
您的实体目前不完整。最好使用 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;
}
}
您post的控制器代码目前不完整。但我认为你需要在 $responsableSecteur = $em->getRepository(ResponsableSecteur::class)->find($id);
下添加以下行:
$filterWeek = new FilterWeek();
$filterWeek->setNbWeek($request->get('nbWeek'));
$em->persist($filterWeek);
$em->flush();
它创建了FilterWeek 的对象并将其推送到数据库中。确保您已经在数据库中创建了 table。
表单和模板看起来不错。至少,我不需要改进它们就可以开始工作了。
终于找到了问题的答案:
解释:
在控制器中
我不得不使用请求参数($request)。 并检索在 get 方法中传递的参数:
而且你要小心,因为get方法的结果是一串字符...
$value = $request -> get('parameter')
例如在我的例子中它看起来像:
$nb_week = $request->get('nbWeek')
由于结果是一串字符,我们应用了 intval 方法,因此它是一个整数。
$nb_week = intval( $request->get('nbWeek') ) ;