问:[Symfony 4] 我如何从我的控制器使用会话访问我的表单数据?
Q: [Symfony 4] How may i access to my form's data using session from my controller?
我正在使用 symfony4 构建一个购物车应用程序。
我必须使用会话创建购物车以存储购买数据。
我创建了一个存储项目的表单 selected。但是我不知道如何从我的控制器中获取这个项目。
首先,我有我的树枝视图,其中我 select 元素 :
{% extends 'base.html.twig' %}
{% block body %}
<form action="{{ path('add_cart', {'id': product.id}) }}" method="get">
<div class="card" style="width: 18rem;">
<img class="card-img-top" src="https://via.placeholder.com/350x150" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{ product.name }}</h5>
<p class="card-text">{{ product.description | raw}}</p>
<p class="card-text">{{ product.price }} euros.</p>
<select name="quantity_product" class="span1">
{% for i in 1..10 %}
<option value= "{{ i }}">{{ i }} </option>
{% endfor %}
</select>
<a href="{{path('add_cart')}}" class="btn btn-primary" name="validate_product_button">Ajouter au panier</a>
</div>
</div>
</form>
{% endblock %}
然后,这是我的 CartController :
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
class CartController extends AbstractController
{
/**
* @Route("/cart", name="cart")
*/
public function index()
{
$productId = $_POST['id_product'];
return $this->render('cart/index.html.twig', [
'id_product' =>$productId
]);
}
/**
* @Route("/addCart", name="add_cart")
*/
public function addProductToCart(Request $request)
{
$session = new Session(new NativeSessionStorage(), new AttributeBag());
$session->set('cart', array());
$cart = $session->get('cart');
return $this->render('cart/index.html.twig');
}
}
我的问题很简单:我应该如何使用会话元素才能从以前的表单中获取元素(id_product、quantity_product)?
我看到了几个使用 symfony 2 或 3 的答案。但是到目前为止,symfony 4 已经发生了许多变化,我根本不知道如何使用它。
很抱歉,您的代码不符合框架标准。
首先,你必须使用Symfony表单组件,而不是手动编写=> https://symfony.com/doc/current/forms.html
接下来,Symfony 禁止使用 $_POST 等全局变量。
当您的代码正确时,您可以将产品 ID 像 url 的参数一样传递给方法 addProductToCart。
检查文档:https://symfony.com/doc/current/routing.html
对于初学者:请在开始项目之前阅读文档,这对你更好!!
我正在使用 symfony4 构建一个购物车应用程序。
我必须使用会话创建购物车以存储购买数据。
我创建了一个存储项目的表单 selected。但是我不知道如何从我的控制器中获取这个项目。
首先,我有我的树枝视图,其中我 select 元素 :
{% extends 'base.html.twig' %}
{% block body %}
<form action="{{ path('add_cart', {'id': product.id}) }}" method="get">
<div class="card" style="width: 18rem;">
<img class="card-img-top" src="https://via.placeholder.com/350x150" alt="Card image cap">
<div class="card-body">
<h5 class="card-title">{{ product.name }}</h5>
<p class="card-text">{{ product.description | raw}}</p>
<p class="card-text">{{ product.price }} euros.</p>
<select name="quantity_product" class="span1">
{% for i in 1..10 %}
<option value= "{{ i }}">{{ i }} </option>
{% endfor %}
</select>
<a href="{{path('add_cart')}}" class="btn btn-primary" name="validate_product_button">Ajouter au panier</a>
</div>
</div>
</form>
{% endblock %}
然后,这是我的 CartController :
<?php
namespace App\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Component\HttpFoundation\RedirectResponse;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Attribute\AttributeBag;
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
class CartController extends AbstractController
{
/**
* @Route("/cart", name="cart")
*/
public function index()
{
$productId = $_POST['id_product'];
return $this->render('cart/index.html.twig', [
'id_product' =>$productId
]);
}
/**
* @Route("/addCart", name="add_cart")
*/
public function addProductToCart(Request $request)
{
$session = new Session(new NativeSessionStorage(), new AttributeBag());
$session->set('cart', array());
$cart = $session->get('cart');
return $this->render('cart/index.html.twig');
}
}
我的问题很简单:我应该如何使用会话元素才能从以前的表单中获取元素(id_product、quantity_product)?
我看到了几个使用 symfony 2 或 3 的答案。但是到目前为止,symfony 4 已经发生了许多变化,我根本不知道如何使用它。
很抱歉,您的代码不符合框架标准。
首先,你必须使用Symfony表单组件,而不是手动编写=> https://symfony.com/doc/current/forms.html
接下来,Symfony 禁止使用 $_POST 等全局变量。
当您的代码正确时,您可以将产品 ID 像 url 的参数一样传递给方法 addProductToCart。 检查文档:https://symfony.com/doc/current/routing.html
对于初学者:请在开始项目之前阅读文档,这对你更好!!