➜ 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
id
ynombre
mediante 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
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.
- Extrae la parte codificada de la imagen usando
- Genera un slug automáticamente para el campo
slug
utilizandoStr::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
urlfoto
con 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
slug
se 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);
}
}
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