09 Panel de Administración 02 – Taller de desarrollo de una Tienda en Línea

Hola, bienvenido(a), al Post 09 del Taller de Desarrollo de una Tienda en línea con Bootstrap, Laravel 5.1 y la API de Paypal.

Hoy vamos a continuar desarrollando el Panel de Administración de nuestra tienda en línea.

Vamos a crear el CRUD para nuestros productos, por lo que necesitamos:

Crear nuestro controlador, esto lo hacemos desde la línea de comandos:

Ahora registramos el controller en nuestro router:

READ

Para crear el Read de nuestro CRUD, en el método index de nuestro controller obtenemos los productos y se los pasamos a la vista index:

Creamos en la carpeta admin dentro de views una carpeta llamada product y dentro el archivo index.blade.php, en la que mostraremos una tabla con todos nuestros productos:

Con esto nuestra vista index se vera así:

crud_productos

 

CREATE

Ahora para implementar nuestro Create del CRUD, en el método create de nuestro controller obtenemos el listado de categorías y se lo pasamos a la vista create:

Creamos la vista create dentro de la carpeta product y en ella el código del formulario de creación de un  nuevo producto:

Probamos en el navegador y nuestro formulario se verá así:

form_create_product

La información del formulario se enviará al método store de nuestro controller, en donde se validará y se almacenará en la base de datos:

UPDATE

Ahora para implementar el Update del CRUD, en el método edit de nuestro controller obtenemos el listado de categorías y se lo pasamos a la vista edit junto con el objeto $product:

Creamos la vista edit dentro de la carpeta product y en ella el código del formulario de edición de producto:

Probamos en el navegador y nuestro formulario se verá así:

form_edit_product

La información del formulario se enviará al método update de nuestro controller, en donde se validará y se actualizará la información del producto en la base de datos:

DELETE

Por ultimo para implementar el Delete del CRUD, en el index de nuestro crud modificamos el código del botón eliminar para que quede de la siguiente forma:

Y el método destroy de nuestro controller quedará así:

De esta forma quedará finalizado el crud para nuestros productos.

Todos los detalles y mas los puedes ver en el vídeo de la clase:

En el siguiente post desarrollaremos el crud para nuestros usuarios.

Eso es todo para este post, compártelo por favor.

Espero tus comentarios y nos vemos en el siguiente 🙂

  • Cristian

    Hola estimado

    felicidades nuevamente por los videos, tengo una consulta en el formulario ingreso de productos, en vez de guardar la url de la imagen, como puedo guardar la imagen desde mi pc.

    saludos

    • Hola Cristian, gracias, te comparto un ejemplo sencillo de como podrías subir una imagen desde tu pc cuando das de alta un nuevo producto: http://www.easylaravelbook.com/blog/2015/04/08/processing-file-uploads-with-laravel-5/

      • Cristian

        gracias estimado

        me funciono bien, pero necesito guardar la imagen en el campo image de la tabla products, por que en este minuto me los guarda en una carpeta.

        saludos

        • Lo que se almacena en la base de datos es el nombre de la imagen, lo puedes hacer así;
          $product->image = $imageName;
          $product->save();

          Esto justo antes del redirect, para mostrarla, usas la función asset:

          {{ asset(‘images/’ . $product->image) }}

  • Roberto Figuera Espinoza

    Hola excelente todo… Solo quería hacerte una pregunta de un error que me lanza no a partir d este video sino desde que implementaste el carrito…todo funciona bien la mayoria de las veces, pero de 8 veces que le doy a pagar con paypal 2 veces me sale un error las otras veces si me sale todo bien, dicen asi sabras por que?:

    a veces me sale esto : PayPalConnectionException in PayPalHttpConnection.php line 141:
    Resolving timed out after 10521 milliseconds

    y otras veces esto : PayPalConnectionException in PayPalHttpConnection.php line 178:
    Got Http response code 500 when accessing https://api.sandbox.paypal.com/v1/payments/payment.

    • Hola Roberto, los errores que mencionas solo pudieron haberse generado después de que instalamos el package de la api de paypal, porque son excepciones que genera la api de paypal, no estoy seguro de a que se deban, pero por lo que vi en este link https://github.com/paypal/PayPal-PHP-SDK/issues/295, pueden deberse a que al hacer las pruebas el sandbox detecta que son demasiadas de un mismo cliente en poco tiempo y lanza una excepción. Una posible solución sería que generaras mas usuarios en el dashboard de paypal y hacer las pruebas de pedidos con diferentes usuarios.

      • Roberto Figuera Espinoza

        ahhhhh ok si claro correcto yo te dije cuando hiciste lo de paypal, pero bah el funciona bien solo a veces se pone así, si debe ser por lo q tu dices gracias man…

  • Kym Kim ER

    FELICIDADES OVEDFS TUS TALLERES CURSOS,,, Y VIDEOS SON DE MUCHA UTILIDAD
    GRACIAS POR COMPARTIR TU CONOCIMIENTO………………………..

    • Hola Kim, gracias a ti por seguir el taller, saludos!!!

  • Zay Vehz

    HOLA MUCHAS GRACIAS POR TUS VIDEOS.

    OYE fIDENCIO PORFIS sube el deploy porfavor……….y ayudaaaa ayudaaaa
    podrias hacer el ejemplo de como subir una imagen de nuestra laptop… al formulario de ingreso de productos… (dificilmente lo hariamos desde urls externas)

    de ante mano muchas graciass. tus tutoriales SIRVEN DE MUCHO A LA COMUNIDADDDDDDDDDDDDDDDDDDDDDDDDDDD
    🙂 :=) 🙂 :d :d 😀 🙂 :=) 🙂 :d :d 😀

  • Edward

    Buenas tardes OVEDFS, tengo un problema con al edición de los productos, los campos del formulario estan viniendo vació.

    Esta es parte de la estructura que tengo:

    ProductController:

    public function edit(Product $product)

    {

    $categories = Category::orderBy(‘id’, ‘asc’)->lists(‘name’, ‘id’);

    return view(‘product.edit’, compact(‘categories’, ‘product’));

    }

    Formulario:

    {!! Form::model($product, array(‘route’ => array(‘product.update’, $product->slug))) !!}

    Categoría

    {!! Form::select(‘category_id’, $categories, null, [‘class’ => ‘form-control’]) !!}

    {!! Form::label(‘name’, ‘Nombre de producto’) !!}

    {!! Form::text(‘name’, null, [‘class’ => ‘form-control’]) !!}

    {!! Form::label(‘description’, ‘Descripción’) !!}

    {!! Form::textarea(‘description’, null, [‘class’ => ‘form-control’]) !!}

    {!! Form::label(‘price’, ‘Precio’) !!}

    {!! Form::text(‘price’, null, [‘class’ => ‘form-control’]) !!}

    {!! Form::label(‘visible’, ‘Activo’) !!}

    {!! Form::checkbox(‘visible’, null, array(‘class’=>’form-control’,)) !!}

    {!! Form::button(‘ Guardar’, array(‘type’ => ‘submit’, ‘class’ => ‘btn btn-primary’, ‘data-toggle’ => ‘tooltip’, ‘title’ => ‘Guardar’,)) !!}

    Cancelar

    {!! Form::close() !!}

    Si ves algo en el cual este cometiendo un error te lo agradecería.

    Saludos.

  • Edward

    Otra consulta y si alguien dentro del foro de preguntas ha encontrado la forma de hacerlo favor compartirla.

    Como se podria colocar un label de bootstrap a estos estados?

    {{ $product->visible == 1 ? “Si” : “No” }}

    span class=”label label-success”>SuccessDanger</span – Si el estado es No

  • Nikon

    Si alguien utiliza un Laravel posterior a 5.2 en el método create de Product Controller canvien “lists” por “pluck”.

  • disqus_7nVxUoyUO5

    Muy Buen ejemplo, se podra implementar el uso de ajax y tambien un texto para hacer busquedas