➜ 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);
}
}
1341 visitas
Capítulo 12 – CRUD Empresa »
Descarga el código del proyecto
Descarga el código fuente del proyecto adquiriendo el curso completo
Comprar