Capitulo 11 del Módulo 2 API Rest | BackEnd

➜ CRUD Categoría

CRUD para el modelo Categorías | Implementación del CRUD: index, store, show, update y destroy en controlador CategoriaController para el modelo Categorías

Implementación del CRUD para el modelo  Categorías

 

A continuación, se describe en detalle el código del controlador CategoriaController.php, que implementa un CRUD (Create, Read, Update, Delete) para el modelo Categorías en Laravel. Este código incluye funcionalidades adicionales como la carga de imágenes en formato Base64 y la generación automática de slugs.


1. Método index()

php

function index(){

$data = Categoria::orderBy("orden")->get(["id","nombre"]);

return response()->json($data, 200);

}

  • Funcionalidad: Recupera todas las categorías almacenadas en la base de datos.
  • Detalles:
    • Utiliza el método orderBy("orden") para ordenar las categorías por el campo orden.
    • Selecciona solo los campos id y nombre mediante el método get(["id", "nombre"]).
    • Devuelve los datos en formato JSON con un código de estado HTTP 200.

2. Método store()

php

public function store(Request $request){

// Validación (puedes agregar reglas según tus necesidades)

$data = new Categoria($request->all());

 

// Procesamiento de la imagen Base64

if($request->urlfoto){

$img = $request->urlfoto;

$folderPath = "/img/categoria/";

$image_parts = explode(";base64,", $img);

$image_type_aux = explode("image/", $image_parts[0]);

$image_type = $image_type_aux[1];

$image_base64 = base64_decode($image_parts[1]);

 

$file = $folderPath . Str::slug($request->nombre) . '.'.$image_type;

file_put_contents(public_path($file), $image_base64);

$data->urlfoto = Str::slug($request->nombre) . '.'.$image_type;

}

 

// Generar slug automáticamente

$data->slug = Str::slug($request->nombre);

// Guardar en la base de datos

$data->save();

return response()->json($data, 200);

}

  • Funcionalidad: Crea una nueva categoría y guarda los datos en la base de datos.
  • Detalles:
    • Crea una nueva instancia del modelo Categoria utilizando los datos recibidos en la solicitud ($request->all()).
    • Si se proporciona una imagen en formato Base64 ($request->urlfoto):
      • Extrae la parte codificada de la imagen usando explode(";base64,", $img).
      • Decodifica la imagen con base64_decode().
      • Guarda la imagen en la carpeta /img/categoria/ con un nombre generado a partir del slug del nombre de la categoría.
      • Asigna la ruta de la imagen al campo urlfoto del modelo.
    • Genera un slug automáticamente para el campo slug utilizando Str::slug($request->nombre).
    • Guarda los datos en la base de datos con $data->save().
    • Devuelve los datos guardados en formato JSON con un código de estado HTTP 200.

3. Método show()

php

public function show($id){

$data = Categoria::find($id);

return response()->json($data, 200);

}

  • Funcionalidad: Recupera los detalles de una categoría específica mediante su ID.
  • Detalles:
    • Busca la categoría en la base de datos utilizando Categoria::find($id).
    • Devuelve los datos de la categoría en formato JSON con un código de estado HTTP 200.

4. Método update()

php

public function update(Request $request, $id){

// Validación (puedes agregar reglas según tus necesidades)

$data = Categoria::find($id);

$data->fill($request->all());

 

// Procesamiento de la imagen Base64

if ($request->file){

$img = $request->file;

$folderPath = "/img/categoria/";

$image_parts = explode(";base64,", $img);

$image_type_aux = explode("image/", $image_parts[0]);

$image_type = $image_type_aux[1];

$image_base64 = base64_decode($image_parts[1]);

 

$file = $folderPath . Str::slug($request->nombre) . '.'.$image_type;

file_put_contents(public_path($file), $image_base64);

$data->urlfoto = Str::slug($request->nombre) . '.'.$image_type;

}

 

// Generar slug automáticamente

$data->slug = Str::slug($request->nombre);

 

// Guardar cambios

$data->save();

 

return response()->json($data, 200);

}

  • Funcionalidad: Actualiza los datos de una categoría existente.
  • Detalles:
    • Busca la categoría por su ID con Categoria::find($id).
    • Actualiza los datos del modelo con $data->fill($request->all()).
    • Si se proporciona una nueva imagen en formato Base64:
      • Procesa la imagen de la misma manera que en el método store().
      • Actualiza el campo urlfoto con la nueva ruta de la imagen.
    • Genera un nuevo slug automáticamente para el campo slug.
    • Guarda los cambios en la base de datos con $data->save().
    • Devuelve los datos actualizados en formato JSON con un código de estado HTTP 200.

5. Método destroy()

php

public function destroy($id){

$data = Categoria::find($id);

$data->delete();

return response()->json("Borrado", 200);

}

  • Funcionalidad: Elimina una categoría existente.
  • Detalles:
    • Busca la categoría por su ID con Categoria::find($id).
    • Elimina la categoría de la base de datos con $data->delete().
    • Devuelve una respuesta JSON con el mensaje "Borrado" y un código de estado HTTP 200.

Características Clave del Código

  1. Manejo de Imágenes Base64:

    • Las imágenes se decodifican y se almacenan en la carpeta /img/categoria/.
    • Los nombres de archivo se generan automáticamente usando el helper Str::slug() para evitar caracteres especiales.
  2. Generación Automática de Slugs:

    • El campo slug se genera automáticamente a partir del nombre de la categoría utilizando Str::slug().
  3. Respuestas JSON:

    • Todos los métodos devuelven respuestas en formato JSON, lo que hace que este controlador sea ideal para APIs RESTful.
  4. Ordenamiento Personalizado:

    • En el método index(), las categorías se muestran ordenadas por el campo orden.

Este código es una implementación completa y funcional de un CRUD para el modelo Categorías, con características adicionales como el manejo de imágenes y la generación de slugs. Es un ejemplo claro y práctico para desarrolladores que trabajan con Laravel.

 

CategoriaController.php

<?php

namespace App\Http\Controllers\Api\Admin;

use App\Models\Categoria;
use Illuminate\Support\Str;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;

class CategoriaController extends Controller
{
    public function index(){
        $data = Categoria::orderBy("orden")->get(["id","nombre"]);
        return response()->json($data, 200);
    }

    public function store(Request $request){
        // validación
        $data = new Categoria($request->all());
        /// upload image base64
        if($request->urlfoto){
            $img = $request->urlfoto;
            /// process
            $folderPath = "/img/categoria/";
            $image_parts = explode(";base64,", $img);
            $image_type_aux = explode("image/", $image_parts[0]);
            $image_type = $image_type_aux[1];
            $image_base64 = base64_decode($image_parts[1]);            
            $file = $folderPath . Str::slug($request->nombre) . '.'.$image_type;
            file_put_contents(public_path($file), $image_base64);
            $data->urlfoto  =   Str::slug($request->nombre) . '.'.$image_type;
        }
        $data->slug = Str::slug($request->nombre);        
        $data->save();
        return response()->json($data, 200);
    }

    public function show($id){
        $data = Categoria::find($id);
        return response()->json($data, 200);
    }

    public function update(Request $request, $id){
        // validación ...
        $data = Categoria::find($id);
        $data->fill($request->all());
        if ($request->file){            
            $img = $request->file;
            $folderPath = "/img/categoria/"; //path location            
            $image_parts = explode(";base64,", $img);
            $image_type_aux = explode("image/", $image_parts[0]);
            $image_type = $image_type_aux[1];
            $image_base64 = base64_decode($image_parts[1]);
            
            $file = $folderPath . Str::slug($request->nombre) . '.'.$image_type;
            file_put_contents(public_path($file), $image_base64);
            $data->urlfoto  =   Str::slug($request->nombre) . '.'.$image_type;
        }     
        $data->slug = Str::slug($request->nombre);
        $data->save();        
        return response()->json($data, 200);
    }

    public function destroy($id){
        $data = Categoria::find($id);
        $data->delete();
        return response()->json("Borrado", 200);
    }
}

 

 


1127 visitas

Capítulo 12 – CRUD Empresa »

Descarga el código del proyecto

Descarga el código fuente del proyecto adquiriendo el curso completo

Comprar

¡Qué aprenderás?

tooltip bs-tooltip-top bs-tooltip-end bs-tooltip-bottom bs-tooltip-start show fade tooltip-inner

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú