如何从树枝上的表单 (POST) 检索数据而不刷新它们
How to retrieve data from a form (POST) on a twig without flush them
我尝试使用一个简单的控制器和一个表单将不同的参数发送到另一个页面并在此页面上检索它们,我不想在数据库中刷新它们,我想先应用这个 Logi :你得到一个带有动作和方法的表单,然后在动作页面上你只需要像这样 $_POST['data'] 或 $_GET['data'] 检索你的数据。我是 Symfony 的新手,我只想用我的数据复制这个逻辑。
namespace App\Controller;
use App\Entity\Brasser;
use App\Form\BrasserType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class BrasserController extends AbstractController
{
/**
* @Route("/brasser", name="brasser")
*/
public function index(Request $request)
{
$biere = new Brasser();
$form = $this->createForm(BrasserType::class, $biere, [
'action' => $this->generateUrl('panier'),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$form->getData();
return $this->redirectToRoute('panier');
}
return $this->render('brasser/index.html.twig', [
'controller_name' => 'BrasserController',
'brasser' => $form->createView(),
]);
}
/**
* @Route("/panier", name="panier")
*/
public function panier()
{
$panier = 'Votre sélection de bière';
return $this->render('brasser/panier.html.twig', [
'panier' => $panier,
]);
}
}
我的模板:
{% extends 'base.html.twig' %}
{% block body %}
{{ panier }}
<p><a href="{{ path('accueil') }}">Retour accueil</a></p>
{% endblock %}
胸罩类型:
<?php
namespace App\Form;
use App\Entity\Brasser;
use Doctrine\DBAL\Types\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class BrasserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('orge', CheckboxType::class)
->add('houblon', CheckboxType::class)
->add('epice', CheckboxType::class)
->add('Valider', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class'=> Brasser::class
]);
}
}
当我查看请求的转储时,我有数据但进入了请求参数,但我无法让它们使用它们。
array:3 [▼
"panier" => "Votre sélection de bière"
"essai" => null
"app" => Symfony\Bridge\Twig\AppVariable {#731 ▼
-tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#150 ▶}
-requestStack: Symfony\Component\HttpFoundation\RequestStack {#106 ▼
-requests: array:1 [▼
0 => Symfony\Component\HttpFoundation\Request {#45 ▼
+attributes: Symfony\Component\HttpFoundation\ParameterBag {#89 ▶}
+request: Symfony\Component\HttpFoundation\ParameterBag {#96 ▼
#parameters: array:1 [▼
"brasser" => array:5 [▼
"orge" => "1"
"houblon" => "1"
"epice" => "1"
"Valider" => ""
"_token" => "8krrCjCTfKsG8UkaDbhRNKXQjrD63cxJWKog4pR46Ws"
]
]
}
这是 $form->getData() 在 redirectRoute 之前包含的内容。
object(App\Entity\Brasser)#739 (4) {
["id":"App\Entity\Brasser":private]=>
NULL
["orge":"App\Entity\Brasser":private]=>
string(5) "Hello"
["houblon":"App\Entity\Brasser":private]=>
string(1) "1"
["epice":"App\Entity\Brasser":private]=>
string(1) "1"
}
如果你想传递信息,你可以将它添加到你的函数的参数中,像这样重定向:
return $this->redirectToRoute('panier', ['panier' => $form->getData()]);
然后您可以在您的下一个控制器中恢复您的数据:
function panier(Request $request) {
$panier = $request->request->get('panier');
return $this->render('brasser/panier.html.twig', [
'panier' => $panier
]);
}
我尝试使用一个简单的控制器和一个表单将不同的参数发送到另一个页面并在此页面上检索它们,我不想在数据库中刷新它们,我想先应用这个 Logi :你得到一个带有动作和方法的表单,然后在动作页面上你只需要像这样 $_POST['data'] 或 $_GET['data'] 检索你的数据。我是 Symfony 的新手,我只想用我的数据复制这个逻辑。
namespace App\Controller;
use App\Entity\Brasser;
use App\Form\BrasserType;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Routing\Annotation\Route;
class BrasserController extends AbstractController
{
/**
* @Route("/brasser", name="brasser")
*/
public function index(Request $request)
{
$biere = new Brasser();
$form = $this->createForm(BrasserType::class, $biere, [
'action' => $this->generateUrl('panier'),
]);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$form->getData();
return $this->redirectToRoute('panier');
}
return $this->render('brasser/index.html.twig', [
'controller_name' => 'BrasserController',
'brasser' => $form->createView(),
]);
}
/**
* @Route("/panier", name="panier")
*/
public function panier()
{
$panier = 'Votre sélection de bière';
return $this->render('brasser/panier.html.twig', [
'panier' => $panier,
]);
}
}
我的模板:
{% extends 'base.html.twig' %}
{% block body %}
{{ panier }}
<p><a href="{{ path('accueil') }}">Retour accueil</a></p>
{% endblock %}
胸罩类型:
<?php
namespace App\Form;
use App\Entity\Brasser;
use Doctrine\DBAL\Types\TextType;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
use Symfony\Component\Form\Extension\Core\Type\SubmitType;
class BrasserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('orge', CheckboxType::class)
->add('houblon', CheckboxType::class)
->add('epice', CheckboxType::class)
->add('Valider', SubmitType::class)
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class'=> Brasser::class
]);
}
}
当我查看请求的转储时,我有数据但进入了请求参数,但我无法让它们使用它们。
array:3 [▼
"panier" => "Votre sélection de bière"
"essai" => null
"app" => Symfony\Bridge\Twig\AppVariable {#731 ▼
-tokenStorage: Symfony\Component\Security\Core\Authentication\Token\Storage\UsageTrackingTokenStorage {#150 ▶}
-requestStack: Symfony\Component\HttpFoundation\RequestStack {#106 ▼
-requests: array:1 [▼
0 => Symfony\Component\HttpFoundation\Request {#45 ▼
+attributes: Symfony\Component\HttpFoundation\ParameterBag {#89 ▶}
+request: Symfony\Component\HttpFoundation\ParameterBag {#96 ▼
#parameters: array:1 [▼
"brasser" => array:5 [▼
"orge" => "1"
"houblon" => "1"
"epice" => "1"
"Valider" => ""
"_token" => "8krrCjCTfKsG8UkaDbhRNKXQjrD63cxJWKog4pR46Ws"
]
]
}
这是 $form->getData() 在 redirectRoute 之前包含的内容。
object(App\Entity\Brasser)#739 (4) {
["id":"App\Entity\Brasser":private]=>
NULL
["orge":"App\Entity\Brasser":private]=>
string(5) "Hello"
["houblon":"App\Entity\Brasser":private]=>
string(1) "1"
["epice":"App\Entity\Brasser":private]=>
string(1) "1"
}
如果你想传递信息,你可以将它添加到你的函数的参数中,像这样重定向:
return $this->redirectToRoute('panier', ['panier' => $form->getData()]);
然后您可以在您的下一个控制器中恢复您的数据:
function panier(Request $request) {
$panier = $request->request->get('panier');
return $this->render('brasser/panier.html.twig', [
'panier' => $panier
]);
}