Symfony2

Symfony2 (5)

Martes, 06 Octubre 2015 00:00

miniSimpleCart

Escrito por

<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');
    }
Lunes, 08 Diciembre 2014 00:00

Plantillas dentro de carpetas

Escrito por

Si necesitas anidar tus plantillas en subcarpetas aquí la receta.

class DefaultController extends Controller
{
    public function indexAction()
    {
        return $this->render('AppBundle:Frontend/Default:index.html.twig', array());    }

}

 

Domingo, 07 Diciembre 2014 00:00

Controladores dentro de carpetas

Escrito por

Si deseas poner un controlador dentro de una carpeta aquí la receta se usa \ porque nos referimos en realidad al namespace

index:
    path:     /index
    defaults: { _controller: AppBundle:Frontend\Default:index }

 

Martes, 02 Diciembre 2014 00:00

Symfony2 Resellerclub Bundle

Escrito por

Hemos publicado un bundle para consumir de forma fácil la API de ResellerClub.

Si desean experimentar pueden descargarla de:

https://github.com/aprendephp/ApResellerclubBundle

Los PR son bienvenidos

Lunes, 10 Noviembre 2014 00:00

Sobre las Buenas Prácticas Oficiales de Symfony

Escrito por

Hace casi un mes SensioLabs publicó las Buenas Prácticas Oficiales de Symfony, un libro que definitivamente ayuda a unificar criterios de cómo usar el framework. Pero desde su lanzamiento han existido múltiples críticas en las redes sociales por parte de comunidad.

La pregunta es, hasta qué punto el documento propone "buenas prácticas", por ejemplo se propone como una buena práctica el uso de anotaciones para el enrutamiento, esto es algo que a muchos programadores, los ha dejado casi sin aliento.

Por otro lado las recomendaciones en su conjunto apuntalan a Symfony2 en la dirección de un framework full stack, y tienden hasta cierto punto a desvanecer las estructuras de bundles, este es un paso interesante, y quizá positivo, porque el bundle es en la práctica un puente hacia los componentes , donde está por así decirlo la mina de oro del framework.

Existen otras críticas incluso en la forma de redacción del documento, y es bueno anotar para quienes no están muy relacionados con la comunidad de Symfony2, que esta es una comunidad hasta cierto punto reducida pero muy exigente de programadores que critican de forma a veces muy ácida el código de sus colegas.

En todo caso debemos decir que es un documento que se debe tomar con "mucho" cuidado y esperemos que en futuro evolucione con la participación de la comunidad. 

La elaboración de un documento que unifique criterios delata dos cosas positivas: primero la flexibilidad ya conocida Symfony2 y segundo la necesidad de encontrar dentro de esa flexibilidad criterios unificadores para las aplicaciones más frecuentes, este segundo paso en necesario sobre todo para llevar el framework a una comunidad más amplia. 

 

http://richardmiller.co.uk/2014/10/14/the-new-symfony-best-practices/

http://php-and-symfony.matthiasnoback.nl/2014/10/unnecessary-contrapositions-in-the-new-symfony-best-practices/