➜ 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 campoorden.
- Selecciona solo los campos idynombremediante el métodoget(["id", "nombre"]).
- Devuelve los datos en formato JSON con un código de estado HTTP 200.
 
- Utiliza el método 
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 Categoriautilizando 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 urlfotodel modelo.
 
- Extrae la parte codificada de la imagen usando 
- Genera un slug automáticamente para el campo slugutilizandoStr::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.
 
- Crea una nueva instancia del modelo 
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.
 
- Busca la categoría en la base de datos utilizando 
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 urlfotocon la nueva ruta de la imagen.
 
- Procesa la imagen de la misma manera que en el método 
- 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.
 
- Busca la categoría por su ID con 
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.
 
- Busca la categoría por su ID con 
Características Clave del Código
- 
	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.
 
- Las imágenes se decodifican y se almacenan en la carpeta 
- 
	Generación Automática de Slugs: - El campo slugse genera automáticamente a partir del nombre de la categoría utilizandoStr::slug().
 
- El campo 
- 
	Respuestas JSON: - Todos los métodos devuelven respuestas en formato JSON, lo que hace que este controlador sea ideal para APIs RESTful.
 
- 
	Ordenamiento Personalizado: - En el método index(), las categorías se muestran ordenadas por el campoorden.
 
- En el método 
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);
    }
}
1270 visitas
Capítulo 12 – CRUD Empresa »
Descarga el código del proyecto
Descarga el código fuente del proyecto adquiriendo el curso completo
Comprar