重定向到Symfony5上的路由上一页



我的网站上有一个购物车功能
我在两个不同的页面(cart.html.twig和home.html.twitch(上显示购物车,我可以在这两个页面上修改购物车
当我想用按钮增加一个产品+1时,我会被重定向到单一路线
如果用户在主页上增加产品,我希望他重定向到主页,而如果他在购物车页面上增加产品(我希望他被重定向到购物车页面(,我该怎么做,我有点不知所措
是否有重定向到上一页的方法

有一个代码:

class CartService {
protected $session;
protected $productRepository;
public function __construct(SessionInterface $session, ProductRepository $productRepository){
$this->session = $session;
$this->productRepository = $productRepository;
}
public function add(int $id){
$cart = $this->session->get('cart', []);
if(isset($cart[$id])){
$cart[$id]++;
} else {
$cart[$id] = 1;
}
$this->session->set('cart', $cart);
}
public function remove(int $id) {
$cart = $this->session->get('cart', []);
if(isset($cart[$id])){
if($cart[$id] > 1){
$cart[$id]--;
} else {
unset($cart[$id]);
}
}
$this->session->set('cart', $cart);
}
public function delete(int $id){
$cart = $this->session->get('cart', []);
if(isset($cart[$id])){
unset($cart[$id]);
}
$this->session->set('cart', $cart);
}
public function getFullCart() : array{
$cart = $this->session->get('cart', []);

$cartWithData = [];
foreach($cart as $id => $quantity){
$cartWithData[] = [
'product' => $this->productRepository->find($id),
'quantity' => $quantity
];
}
return $cartWithData;
}
public function getTotal(): float{
$total = 0;
foreach($this->getFullCart() as $item){
$total += $item['product']->getPrice() * $item['quantity'];
}
return $total;
}

}

cartpage的控制器:

class CartController extends AbstractController{
/**
* @Route ("/cart", name = "cart")
*/
public function cart(CartService $cartservice){
return $this->render(
'users/cart.html.twig',
[
'items' => $cartservice->getFullCart(),
'total' => $cartservice->getTotal()
]
);
}
/**
* @Route ("/cart/add/{id}", name = "add_cart")
*/
public function add($id, CartService $cartservice, Request $request){
$cartservice->add($id);
return $this->redirectToRoute('homepage');
}

/**
* @Route ("/cart/remove/{id}", name="remove_cart")
*/
public function remove($id, CartService $cartservice){
$cartservice->remove($id);
return $this->redirectToRoute('homepage');
}

/**
* @Route ("/cart/delete/{id}", name="delete_cart")
*/
public function delete($id, CartService $cartservice){
$cartservice->delete($id);
return $this->redirectToRoute('homepage');
}

}

我还在我的主页上显示购物车的一部分,我显示卡的价格/名称/数量,我主页的控制器";HomeController.php":

/**
* @Route("/", name="homepage")
*/
public function home(ProductRepository $productRepository, CategoryRepository $categoryRepository, CartService $cartService) : Response{
$productRepository = $this->getDoctrine()->getRepository(Product::class);
$products = $productRepository->findAll();
$categories = $categoryRepository->findAll();
return $this->render(
'users/home.html.twig',
[
'products' => $products,
'categories' => $categories,
'total' => $cartService->getTotal(),
'items' => $cartService->getFullCart()
]
);
}

我在CartController.php 中的函数插件上尝试过这一点

/**
* @Route ("/cart/add/{id}", name = "add_cart")
*/
public function add($id, CartService $cartservice, Request $request){
$cartservice->add($id);
$uri = $request->attributes->get("_route");
return $this->redirectToRoute($uri);
}

但它不起作用,它对我说"缺少一些用于生成路由"的URL的强制参数("id"(;add_cart"以及乘积增量x30。我认为路由cart/add/{id}上的函数循环。

更新:

我只需要得到这样的裁判:

/**
* @Route ("/cart/add/{id}", name = "add_cart")
*/
public function add($id, CartService $cartservice, Request $request){
$cartservice->add($id);
$route = $request->headers->get('referer');
return $this->redirect($route);
}

然后我被重定向到上一页

在控制器中

/**
* @Route ("/cart/add/{id}/{origin}", name = "add_cart")
*/
public function add($id, $origin, CartService $cartservice, Request 
$request){
$cartservice->add($id);
return $this->redirectToRoute($origin);
}   

在你的小树枝主页

<a href="{{ path('add_cart', 
{'id':product.id,'origin':app.request.attributes.get('_route')})}}" >
add +
</a>

对你想要的其他页面也这样做

您可以使用在trick中获取当前路径

app.request.attributes.get('_route'(

然后你把它交给你的控制器

最后,您可以使用if条件重定向

相关内容

  • 没有找到相关文章

最新更新