Martes, 06 Octubre 2015 00:00

miniSimpleCart

Escrito por 
Valora este artículo
(0 votos)

<logo de Ualapi>

Un carrito de compras sencillo y pequeño implementado con Symfony2

Si deseas hacer tu propio carrito de compras y no sabes por donde empezar aquí te ofrecemos una solución práctica.

¿Cómo lo instalo?

Muy fácil como siempre, lo más sencillo es trabajar con git y composer:

git clone Esta dirección de correo electrónico está siendo protegida contra los robots de spam. Necesita tener JavaScript habilitado para poder verlo.:Ualapi/miniSimpleCart.git
cd miniSimpleCart
composer install
php app/console d:d:c
php app/console d:s:c

Cargando los productos

La lista de productos se encuentran en el archivo:

miniSimpleCart/src/AppBundle/DataFixtures/products.yml

products:
    - ['PHP 7', 'what is PHP7', 5.95]
    - ['Symfony 2', 'Learn symfony2 ', 8.5]
    - ['Git and GitHub', 'GitHub is how people build software', 3.5]

 

donde el primer el primer campo es el nombre del producto, luego la descripción y finalmente el precio.

Para cargar la información a la base de datos solo ejecutamos el siguiente comando

php app/console d:f:l

En la práctica puedes crear tu propio backend y usar para la gestion de usuarios FOSUserBundle o similar.

Ahora puedes ver tu carrito de compras con

php app/console s:r

<imagen>

El Código

El Controlador

indexAction

 Recuperamos el carrito de compra (si existe) y lo mostramos cada producto dentro de un formulario.

public function indexAction()
    {
        $cart = $this->get('session')->has('cart') ? $this->get('session')->get('cart') : [];

        return $this->render(
            'AppBundle:app:index.html.twig',
            [
                'formsCart' => $this->getFormCart($cart)->createView(),
                'formProducts' => $this->getFormProductsViews($this->getFormProducts($this->getDoctrine()->getManager()->getRepository('AppBundle:Product')->findAll())),
            ]
        );
    }

 

 

addAction

Permite agregar un producto al carrito.

Simplemente recuperamos consultamos el producto en la base de datos y la cantidad de productos las recuperamos del formulario correspondiente.

public function addAction(Request $request, $id)
    {
        $product = $this->getDoctrine()->getManager()->getRepository('AppBundle:Product')->find($id);

        $form = $this->createForm(new ProductType(), $product);

        $form->handleRequest($request);

        if ($form->isValid()) {
            $cart = $this->get('session')->has('cart') ? $this->get('session')->get('cart') : [];
            $cart[$product->getId()] = ['product' => $product, 'quantity' => $form->get('quantity')->getData()];
            $this->get('session')->set('cart', $cart);
        }
        return $this->redirectToRoute('app_index');
    }

 

updatequantitycartAction

Permite actualizar la cantidad de los productos que ya se encuentra dentro del carrito, simplemente procesamos el formulario y actualizamos la información.

public function updatequantitycartAction(Request $request)
    {
        $cart = $this->get('session')->get('cart');

        $formCart = $this->getFormCart($cart);

        $formCart->handleRequest($request);

        if ($formCart->isValid()) {
            foreach ($formCart->getData() as $productId => $product) {
                $cart [$productId]['quantity'] = $formCart->get($productId)->get('quantity')->getData();
            }
            $this->get('session')->set('cart', $cart);
        }
        return $this->redirectToRoute('app_index');
    }


emptyCartAction

Muy sencillo, limpia el carrito

    public function emptyCartAction()
    {
        $this->get('session')->remove('cart');

        return $this->redirectToRoute('app_index');
    }
Visto 703 veces Modificado por última vez en Martes, 06 Octubre 2015 22:25
Más en esta categoría: « Plantillas dentro de carpetas