Kenneth Angulo L
Symfony un pendiente mas por aprender !
<u>Historia patria</u>: Cuando Taylor Otwell creo Laravel se inspiro en Ruby on Rails y se baso en Symfony para sobre sus componentes armar esta magia que es Laravel.
¿Cómo crear recetas en Laravel?
Desarrollar una función para crear recetas implica aceptar y gestionar datos ingresados por el usuario en una interfaz web y luego procesar estos datos en el servidor. Es un paso crucial para aplicaciones que manejan grandes volúmenes de datos y requieren seguridad y eficiencia.
Primero, debemos utilizar la clase Request de Laravel para recibir datos en un formato JSON. Laravel permite realizar asignaciones masivas de datos, pero es importante configurar una lista blanca que defina qué datos específicamente pueden ser asignados. Para ello, se utiliza la propiedad $fillable dentro de los modelos de Eloquent.
protected $fillable = [ 'categoria_id', 'user_id', 'titulo', 'descripcion', 'ingredientes', 'imagen', 'etiquetas' ];
Esta propiedad actúa como una capa de seguridad al controlar qué datos se permiten para la asignación masiva. Luego, una vez que los datos son almacenados, enviamos una respuesta con el estado HTTP correcto, utilizando componentes de Symfony para mayor claridad y buenas prácticas de código.
¿Cómo manejar estados HTTP al crear?
Al crear una receta, utilizamos el estado HTTP 201, el cual representa la creación exitosa de un recurso. Pero en lugar de usar el número directamente, lo cual puede ser poco claro, es más recomendable usar las constantes de Symfony para mejorar la legibilidad.
use Symfony\Component\HttpFoundation\Response; // Al crear una receta return response()->json($resource, Response::HTTP_CREATED);
Para manejar las etiquetas, utilizamos el método attach que implica agregar etiquetas a una receta sin eliminar las existentes previamente. Sin embargo, cuando queremos actualizar las etiquetas completamente, usamos sync para asegurar que solo existan las etiquetas especificadas.
¿Cómo actualizar recetas y manejar etiquetas?
El proceso de actualización de una receta implica buscar el registro existente y modificar sus datos. Para ello, el método HTTP correcto es PUT que indica una operación de actualización en la API.
$recipe->update($request->all()); $recipe->tags()->sync($tagArray);
El sincronizar etiquetas con sync permite mantener las etiquetas actualizadas de acuerdo a las más recientes solicitudes del usuario. Mientras que, la respuesta debe ser un estado 200 que denota una operación exitosa sin alterar el contenido del recurso.
¿Cómo eliminar con seguridad en Laravel?
Eliminar recursos requiere cuidado, especialmente cuando se trata de operaciones irreversibles. Utilizamos el método DELETE acompañado de una respuesta HTTP 204, lo cual indica que la operación fue exitosa, pero no queda contenido que mostrar.
$recipe->delete(); return response()->json(null, Response::HTTP_NO_CONTENT);
En caso de errores durante la eliminación, es crucial revisar el código y entender que un error como el 500 indica un mal funcionamiento del servidor que puede requerir ajustes en el código o la lógica de negocio.
Consejos prácticos:
El uso de estas herramientas y prácticas asegura un desarrollo robusto y eficiente. ¡Continúa explorando el poderoso mundo del desarrollo web y sigue mejorando tus habilidades en Laravel!
En mi caso estoy usando Insominia y cuando se envia los datos en formato JSON desde Insomnia a una API Laravel, este maneja automáticamente la decodificación de datos JSON en un formato que se puede utilizar directamente en el controlador. Laravel es capaz de realizar esto gracias a su capacidad de manejar solicitudes entrantes y decodificar automáticamente los datos JSON.
código:
public function store(Request $request){ $recipe = Recipe::create($request->all()); if($tags = $request->tags){ $recipe->tags()->attach($tags); } return response()->json(new RecipeResource($recipe), Response::HTTP_CREATED); } public function show( Recipe $recipe){ $recipe->load('category','tags','user'); return new RecipeResource($récipe); }
Recuerdan que desde api se esta usando el apiResource, y hay incluye todos los metodos
Route::apiResource('recipes', RecipeController::class);
Route::get('categories', [CategoryController::class, 'index']); Route::get('categories/{category}', [CategoryController::class, 'show']); Route::apiResource('recipes', RecipeController::class); Route::get('tags', [TagController::class, 'index']); Route::get('tags/{tag}', [TagController::class, 'show']);
Kenneth Angulo L
Symfony un pendiente mas por aprender !
<u>Historia patria</u>: Cuando Taylor Otwell creo Laravel se inspiro en Ruby on Rails y se baso en Symfony para sobre sus componentes armar esta magia que es Laravel.
Camilo Venegas
MCETS DEV
por que enviar ese campo _method y no simplemente cambiar el metodo en el postman, me perdi, en que parte de la documentacion de laravel dice enviar de esa forma
Platzi
El campo _method se utiliza para simular diferentes métodos HTTP en formularios HTML. Laravel utiliza este campo para determinar qué acción realizar en el servidor. Esta convención está documentada en la sección 'Simulating HTTP Methods' de la documentación oficial de Laravel.
Kenneth Angulo L
Resulta que HTTP solo entiende dos verbos 'GET' y 'POST', no mas.
Pero REST(ful) en total maneja 5 verbos.
Entonces hay que decircelo claramente, envio un POST, pero realmente estoy haciendo un 'PATCH' o un 'PUT' o un 'DELETE'.
Romaim Gianfranco Talledo Coronado
Para los métodos de creación, es posible crear datos en detalle_cotizacion(contiene, relación con cotizacion elementos) teniendo encuenta que cotización tiene relación con proyectos. es posible realizar el create llamando a una sola tabla o es necesario realizar el registro tabla por tabla?
Kenneth Angulo L
Es correcto companero, tanto para la creacion como para la actualizacion de datos nos podemos valer de las relaciones si ya existen.
Adjunto un pequeno ejemplo de actualizacion usando relacion contacto-cliente
$contact = $client->contact->update([ 'name' => $request->name, 'cedula' => $request->cedula, 'email' => $request->email, 'phone1' => $request->phone1, ]); ```Tener en cuenta que si tienes una tabla pivot (relacion muchos a muchos). despues de salvar los datos principales debes hacer el **attach() o sync()** segun corresponda, porque esta data viene en su propio array.
John Parra
Falto mostrar la creación de las rutas post, update y delete
Harold German Granados Guerrero
Kenneth Angulo L
John Parra
Las rutas se deben crear tambien? porque cuando le doy post en postman saca error
Harold German Granados Guerrero
Muestra el codigooo
Harold German Granados Guerrero
Recuerda que desde api se esta usando el apiResource, y hay incluye todos los metodos
Route::apiResource('recipes', RecipeController::class);
Route::get('categories', [CategoryController::class, 'index']); Route::get('categories/{category}', [CategoryController::class, 'show']); Route::apiResource('recipes', RecipeController::class); Route::get('tags', [TagController::class, 'index']); Route::get('tags/{tag}', [TagController::class, 'show']);
el metodo apiResource se encarga de gestionar las 5 rutas. si deseas hacerlo de manera independiente la gramatica es la misma:
Route::get($uri, [xController::'index']); Route::get($uri, [xController::'show']); Route::post($uri, [xController::'store']); Route::put($uri, [xController::'update']); Route::patch($uri, [xController::'update']); Route::delete($uri, [xController::'destroy']);
Recuerda que desde api se esta usando el apiResource, y hay incluye todos los metodos
Route::apiResource('recipes', RecipeController::class);
Route::get('categories', [CategoryController::class, 'index']); Route::get('categories/{category}', [CategoryController::class, 'show']); Route::apiResource('recipes', RecipeController::class); Route::get('tags', [TagController::class, 'index']); Route::get('tags/{tag}', [TagController::class, 'show']);