Q: [Symfony 4] Как я могу получить доступ к данным моей формы, используя сеанс с моего контроллера?
Я создаю приложение для корзины покупок, используя symfony4.
Я должен создать корзину, используя сессию, чтобы хранить данные покупки.
Я создал форму, в которой хранится выбранный элемент. Но я не знаю, как получить этот предмет из моего контроллера.
Во-первых, у меня есть вид ветки, где я выбираю элемент:
{% 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, amount_product) из предыдущей формы?
Я видел несколько ответов, используя Symfony 2 или 3. Но в Symfony 4 до сих пор много изменений, и я просто не знаю, как их использовать.
Спасибо за ваши ответы.
1 ответ
Извините, но ваш код не соответствует стандарту фреймворка.
Прежде всего, вы должны использовать компонент формы Symfony вместо того, чтобы писать его вручную => https://symfony.com/doc/current/forms.html
Далее, запрещено использовать глобальные переменные, такие как $_POST, с Symfony.
Когда ваш код будет правильным, вы можете передать идентификатор продукта, такой как параметр url, методу addProductToCart. Проверьте документы: https://symfony.com/doc/current/routing.html
Для начинающих: пожалуйста, прочитайте документацию перед началом проекта, это лучше для вас!