📖Controladores
¿Qué es un controlador?
Un controlador en Laravel es una clase PHP que se encarga de manejar las solicitudes HTTP y proporcionar una respuesta apropiada. Los controladores se utilizan para agrupar el lógica de negocios y proporcionar un punto de acceso central para el manejo de solicitudes HTTP.
Un controlador puede contener varios métodos, cada uno de los cuales se ejecutará en respuesta a una solicitud HTTP específica. Por ejemplo, puedes tener un controlador que maneje las solicitudes para ver, crear, actualizar y eliminar registros de una tabla de la base de datos.
Para crear un controlador en Laravel, debes usar el comando php artisan make:controller seguido del nombre del controlador. Por ejemplo, para crear un controlador llamado ProductosController, ejecutarías el siguiente comando:
php artisan make:controller ProductosController
Una vez creado el controlador, puedes agregar métodos para manejar diferentes solicitudes HTTP. Por ejemplo, puedes tener un método index que muestre una lista de productos y un método store que almacene un nuevo producto en la base de datos.
Para hacer una solicitud HTTP a un controlador, debes definir una ruta en el archivo routes/web.php que apunte a un método específico en el controlador. Por ejemplo, para hacer una solicitud GET a /productos y ejecutar el método index en el controlador ProductosController, podrías agregar la siguiente ruta:
Route::get('/productos', 'ProductosController@index');
El controlador es una parte importante de la arquitectura de Laravel y se utiliza para separar la lógica de negocios de la lógica de presentación, lo que ayuda a mantener tu aplicación limpia y organizada.
Creación de un controladores REST
📇CategoriaController
Para crear un controlador teclee el siguiente comando en su terminal:
php artisan make:controller Api/V1/CategoriaController
Diríjase a la carpeta App\Http\Controllers\Api\V1 y edite el archivo CategoriaController.
Seguidamente comentaremos paso a paso los para crear el controlador:
- De momento teclee el siguiente código
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Categoria;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
Este código añade dos namespaces al controlador:
- App\Models\Categoria, con esta instrucción podremos crear nuestros objetos Categoria y utilizar las instrucciones precisas para realizar un CRUD con Eloquent.
- Illuminate\Support\Facades\Validator, la clase Validator nos permitirá validar los datos de entrada, como que no vengan vacíos y tengan una determinada longitud.
Continuaremos creando la función Index:
public function index()
{
//
return Categoria::all();
}
Esta función devuelve toda la lista de categorías de la BB.DD en formato JSON.
Seguidamente cree esta nueva función:
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
$validator = Validator::make($request->all(), [
'nombre' => 'required|unique:categorias|max:150',
'descripcion' => 'required',
]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
$categoria=Categoria::create($request->all());
return $categoria;
}
Este código es un método en un controlador de Laravel que se encarga de almacenar un nuevo recurso en el almacenamiento. El método toma un objeto Request como parámetro, que representa una solicitud HTTP entrante.
El primer paso en el método es validar los datos entrantes. Esto se hace utilizando el facade Validator proporcionado por Laravel. El Validator se instancia con el método make y los datos a ser validados (todos los datos en el objeto de solicitud). Las reglas de validación se especifican como un arreglo, con las claves siendo los nombres de los campos y los valores siendo las reglas de validación para ese campo. En este caso, el campo 'nombre' es obligatorio, debe ser único en la tabla 'categorias' y debe tener una longitud máxima de 150 caracteres. El campo 'descripción' también es obligatorio.
Si la validación falla, el método devuelve una respuesta JSON que contiene los errores de validación y un código de estado HTTP de 422 (Entidad no procesable).
Si la validación es exitosa, se crea un nuevo objeto Categoria usando el método create y los datos del objeto de solicitud. A continuación, se devuelve el nuevo objeto Categoria creado.
/**
* Display the specified resource.
*
* @param \App\Models\Categoria $categoria
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
$categoria= Categoria::findOrFail($id);
return $categoria;
}
Este código es un método en un controlador de Laravel que se encarga de mostrar un recurso específico. El método toma un parámetro $id, que representa el identificador del recurso a mostrar.
En el método, se usa el método findOrFail en la clase Categoria para encontrar el recurso con el identificador especificado. Si el recurso no se puede encontrar, el método findOrFail lanzará una excepción ModelNotFoundException, que será manejada por Laravel y devolverá una respuesta HTTP 404 (No encontrado).
Si el recurso se encuentra, se asigna a la variable $categoria y se devuelve. Esto permitirá que la información de la categoría se muestre en la respuesta HTTP.
Ahora teclee el siguiente método
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Categoria $categoria
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
$validator = Validator::make($request->all(), [
'nombre' => 'required|unique:categorias|max:150',
'descripcion' => 'required',
]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
$categoria=Categoria::findOrFail($id)->update($request->all());
return $request->all();
}
Este código es una función PHP para actualizar una categoría en una base de datos. La función toma dos parámetros: un objeto Request y un id. El objeto Request se usa para acceder a los datos enviados al servidor en una solicitud HTTP, mientras que el id se usa para identificar la categoría específica que se debe actualizar.
El código comienza validando los datos recibidos en el objeto Request. Se utiliza la clase Validator para verificar si los campos nombre y descripcion están presentes y cumplen con los requisitos especificados (por ejemplo, nombre debe ser único, tener una longitud máxima de 150 caracteres y no puede estar vacío). Si la validación falla, la función devuelve una respuesta JSON con los mensajes de error de validación, junto con un código de estado HTTP de 422 (Entidad no procesable).
Si la validación es exitosa, el código encuentra la categoría con el id dado usando el método findOrFail del modelo Categoria y la actualiza con los datos del objeto Request. Finalmente, los datos actualizados se devuelven en una respuesta JSON.
A continuación introduzca el siguiente código:
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Categoria $categoria
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
Categoria::destroy($id);
return "Categoria $id eliminada.";
}
}
Este código es una función PHP para eliminar una categoría de una base de datos. La función toma un solo parámetro: id. Este id se utiliza para identificar la categoría específica que se debe eliminar.
El código llama al método destroy de la clase Categoria y pasa el id como parámetro. Este método elimina la categoría con el id dado de la base de datos. Finalmente, la función devuelve un mensaje indicando que la categoría con ese id ha sido eliminada.
📇IvaController
Para crear un controlador teclee el siguiente comando en su terminal:
php artisan make:controller Api/V1/CategoriaController
Diríjase a la carpeta App\Http\Controllers\Api\V1 y edite el archivo IvaController.
Seguidamente comentaremos paso a paso los para crear el controlador:
- De momento teclee el siguiente código
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Iva;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class IvaController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
return Iva::all();
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
$validator = Validator::make($request->all(), [
'nombre' => 'required|unique:ivas|max:150',
'tanto_porciento' => 'required',
]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
$iva=Iva::create($request->all());
return $iva;
}
/**
* Display the specified resource.
*
* @param \App\Models\Iva $iva
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
return Iva::findOrFail($id);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Iva $iva
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
$validator = Validator::make($request->all(), [
'nombre' => 'required|unique:ivas|max:150',
'tanto_porciento' => 'required',
]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
$iva=Iva::findOrFail($id)->update($request->all());
return $request->all();
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Iva $iva
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
Iva::destroy($id);
return "Iva $id eliminado.";
}
}
Este código es un controlador de Laravel para manejar las operaciones *CRUD (crear, leer, actualizar y eliminar) para la tabla de impuestos sobre el valor agregado (IVA). La clase IvaController extiende la clase Controller y está ubicada en el namespace App\Http\Controllers\Api\V1.
El controlador tiene los siguientes métodos:
- index: Devuelve todas las entradas de la tabla IVA.
store: Almacena una nueva entrada en la tabla IVA. Valida los datos de entrada utilizando el objeto Validator de Laravel y si la validación falla, devuelve un error en formato JSON. Si la validación es exitosa, la entrada se guarda en la tabla y se devuelve el objeto IVA creado.
show: Muestra una entrada específica de la tabla IVA basada en su ID.
update: Actualiza una entrada existente en la tabla IVA. Valida los datos de entrada utilizando el objeto Validator y si la validación falla, devuelve un error en formato JSON. Si la validación es exitosa, se actualiza la entrada y se devuelven todos los datos de la entrada actualizada.
destroy: Elimina una entrada existente de la tabla IVA basada en su ID. Devuelve un mensaje indicando que la entrada con ese ID ha sido eliminada.
📇MarcaController
Para crear un controlador teclee el siguiente comando en su terminal:
php artisan make:controller Api/V1/MarcaController
Diríjase a la carpeta App\Http\Controllers\Api\V1 y edite el archivo MarcaController.
Seguidamente comentaremos paso a paso los para crear el controlador:
- De momento teclee el siguiente código
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Marca;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
class MarcaController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
return Marca::all();
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
$validator = Validator::make($request->all(), [
'nombre' => 'required|unique:ivas|max:150'
]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
Marca::create($request->all());
return $request->all();
}
/**
* Display the specified resource.
*
* @param \App\Models\Marca $marca
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
return Marca::find($id);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Marca $marca
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
$validator = Validator::make($request->all(), [
'nombre' => 'required|unique:ivas|max:150'
]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
Marca::findOrFail($id)->update($request->all());
return $request->all();
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Marca $marca
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
Marca::destroy($id);
return "Iva $id eliminado.";
}
}
Este es un controlador de Laravel para manejar un recurso de marcas. La función index devuelve todas las marcas existentes, la función store almacena una nueva marca en la base de datos, la función show muestra una marca específica con un ID dado, la función update actualiza una marca existente con un ID dado y la función destroy elimina una marca con un ID dado.
Además, antes de almacenar o actualizar una marca, se realiza una validación para asegurarse de que se proporciona un nombre único y no vacío con una longitud máxima de 150 caracteres. Si la validación falla, se devuelve un error en formato JSON con un código de estado HTTP 422.
📇OfertaController
Para crear un controlador teclee el siguiente comando en su terminal:
php artisan make:controller Api/V1/OfertaController
Diríjase a la carpeta App\Http\Controllers\Api\V1 y edite el archivo OfertaController.
Seguidamente comentaremos paso a paso los para crear el controlador:
- De momento teclee el siguiente código
### 📇MarcaController
Para crear un controlador teclee el siguiente comando en su terminal:
```bash
php artisan make:controller Api/V1/MarcaController
Diríjase a la carpeta App\Http\Controllers\Api\V1 y edite el archivo MarcaController.
Seguidamente comentaremos paso a paso los para crear el controlador:
- De momento teclee el siguiente código
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Oferta;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use \DateTime;
use Illuminate\Support\Facades\DB;
class OfertaController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
//
$ofertas=DB::select('SELECT * FROM v_ofertas');
// dd($productos);
// return Producto::all();
return $ofertas;
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
$validator = Validator::make($request->all(), [
'precio'=>'required',
'descripcion'=>'required',
'fecha_ini'=>'required|date_format:d-m-Y',
'fecha_fin'=>'required|date_format:d-m-Y',
'producto_id'=>'required'
]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
$oferta=new Oferta();
$oferta->precio=$request->precio;
$oferta->descripcion=$request->descripcion;
$oferta->fecha_ini=DateTime::createFromFormat('d-m-Y',$request->fecha_ini)->format('d-m-y');
$oferta->fecha_fin=DateTime::createFromFormat('d-m-Y',$request->fecha_fin)->format('d-m-y');
$oferta->producto_id=$request->producto_id;
$oferta->save();
return $oferta;
}
/**
* Display the specified resource.
*
* @param \App\Models\Oferta $oferta
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
return Oferta::find($id);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Oferta $oferta
* @return \Illuminate\Http\Response
*/
public function update(Request $request,$id)
{
//
$validator = Validator::make($request->all(), [
'precio'=>'required',
'descripcion'=>'required',
'fecha_ini'=>'required|date_format:d-m-Y',
'fecha_fin'=>'required|date_format:d-m-Y',
'producto_id'=>'required'
]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
$oferta=Oferta::find($id);
$oferta->precio=$request->precio;
$oferta->descripcion=$request->descripcion;
$oferta->fecha_ini=DateTime::createFromFormat('d-m-Y',$request->fecha_ini)->format('d-m-y');
$oferta->fecha_fin=DateTime::createFromFormat('d-m-Y',$request->fecha_fin)->format('d-m-y');
$oferta->producto_id=$request->producto_id;
$oferta->save();
return $oferta;
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Oferta $oferta
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
Oferta::destroy($id);
return "Oferta $id eliminada.";
}
}
Este código es un controlador de Laravel para la gestión de ofertas. Tiene métodos para listar, crear, mostrar, actualizar y eliminar ofertas.
El método index recupera todas las ofertas a través de una consulta SQL utilizando el objeto DB de Laravel.
El método store valida los datos de la petición y crea una nueva oferta en la base de datos.
El método show recupera una oferta específica en base a su identificador.
El método update valida los datos de la petición y actualiza la oferta correspondiente.
El método destroy elimina la oferta correspondiente al identificador proporcionado.
Además, se ha aplicado un middleware de autenticación en la API para requerir autenticación en todas las solicitudes.
📇PoblacionController
Para crear un controlador teclee el siguiente comando en su terminal:
php artisan make:controller Api/V1/PoblacionController
Diríjase a la carpeta App\Http\Controllers\Api\V1 y edite el archivo MarcaController.
Seguidamente comentaremos paso a paso los para crear el controlador:
De momento teclee el siguiente código
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Poblacion;
use Illuminate\Http\Request;
class PoblacionController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function __construct()
{
$this->middleware('auth:api');
}
public function index()
{
//
return Poblacion::all()->skip(1000)->take(20);
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*
* @param \App\Models\Poblacion $poblacion
* @return \Illuminate\Http\Response
*/
public function show(Poblacion $poblacion)
{
//
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Poblacion $poblacion
* @return \Illuminate\Http\Response
*/
public function update(Request $request, Poblacion $poblacion)
{
//
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Poblacion $poblacion
* @return \Illuminate\Http\Response
*/
public function destroy(Poblacion $poblacion)
{
//
}
}
📇ProductoController
Para crear un controlador teclee el siguiente comando en su terminal:
php artisan make:controller Api/V1/ProductoController
Diríjase a la carpeta App\Http\Controllers\Api\V1 y edite el archivo ProductoController.
Seguidamente comentaremos paso a paso los para crear el controlador:
- De momento teclee el siguiente código
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Producto;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
class ProductoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function __construct()
{
$this->middleware('auth:api');
}
public function index()
{
//
$productos=DB::select('SELECT * FROM v_productos');
// dd($productos);
// return Producto::all();
return $productos;
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
$validator = Validator::make($request->all(), [
'precio'=>'required',
'nombre'=>'required',
'descripcion'=>'required',
'subcategoria_id'=>'required',
'iva_id'=>'required',
'marce_id'=>'required']);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
Producto::create($request->all());
return $request->all();
}
/**
* Display the specified resource.
*
* @param \App\Models\Producto $producto
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
return Producto::findOrFail($id);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Producto $producto
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
$validator = Validator::make($request->all(), [
'precio'=>'required',
'nombre'=>'required',
'descripcion'=>'required',
'subcategoria_id'=>'required',
'iva_id'=>'required',
'marce_id'=>'required' ]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
Producto::findOrFail($id)->update($request->all());
return $request->all();
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Producto $producto
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
Producto::destroy($id);
return "Producto $id eliminado.";
}
}
El siguiente código es un controlador de Laravel para una aplicación web que maneja productos. Se encarga de realizar operaciones CRUD (crear, leer, actualizar y eliminar) en una base de datos de productos.
El controlador está ubicado en la ruta App\Http\Controllers\Api\V1\ProductoController y extiende la clase Controller de Laravel.
Las funciones disponibles son:
index: Devuelve una lista de todos los productos en la base de datos.
store: Almacena un nuevo producto en la base de datos. Valida los datos recibidos antes de almacenarlos.
show: Devuelve un producto específico según su ID.
update: Actualiza los datos de un producto específico según su ID. Valida los datos recibidos antes de actualizarlos.
destroy: Elimina un producto específico según su ID.
En resumen, este controlador es una parte importante de una aplicación de Laravel que maneja productos y permite a los usuarios realizar operaciones CRUD en la base de datos de productos.
📇ProductoController
Para crear un controlador teclee el siguiente comando en su terminal:
php artisan make:controller Api/V1/ProductoController
Diríjase a la carpeta App\Http\Controllers\Api\V1 y edite el archivo ProductoController.php.
Seguidamente comentaremos paso a paso los para c
<?php
namespace App\Http\Controllers\Api\V1;
use App\Http\Controllers\Controller;
use App\Models\Producto;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
class ProductoController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function __construct()
{
$this->middleware('auth:api');
}
public function index()
{
//
$productos=DB::select('SELECT * FROM v_productos');
// dd($productos);
// return Producto::all();
return $productos;
}
/**
* Store a newly created resource in storage.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
public function store(Request $request)
{
//
$validator = Validator::make($request->all(), [
'precio'=>'required',
'nombre'=>'required',
'descripcion'=>'required',
'subcategoria_id'=>'required',
'iva_id'=>'required',
'marce_id'=>'required']);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
Producto::create($request->all());
return $request->all();
}
/**
* Display the specified resource.
*
* @param \App\Models\Producto $producto
* @return \Illuminate\Http\Response
*/
public function show($id)
{
//
return Producto::findOrFail($id);
}
/**
* Update the specified resource in storage.
*
* @param \Illuminate\Http\Request $request
* @param \App\Models\Producto $producto
* @return \Illuminate\Http\Response
*/
public function update(Request $request, $id)
{
//
$validator = Validator::make($request->all(), [
'precio'=>'required',
'nombre'=>'required',
'descripcion'=>'required',
'subcategoria_id'=>'required',
'iva_id'=>'required',
'marce_id'=>'required' ]);
if($validator->fails()){
return response()->json($validator->errors(),422);
}
Producto::findOrFail($id)->update($request->all());
return $request->all();
}
/**
* Remove the specified resource from storage.
*
* @param \App\Models\Producto $producto
* @return \Illuminate\Http\Response
*/
public function destroy($id)
{
//
Producto::destroy($id);
return "Producto $id eliminado.";
}
}
El siguiente código es un controlador de Laravel para una aplicación web que maneja productos. Se encarga de realizar operaciones CRUD (crear, leer, actualizar y eliminar) en una base de datos de productos.
El controlador está ubicado en la ruta App\Http\Controllers\Api\V1\ProductoController y extiende la clase Controller de Laravel.
Las funciones disponibles son:
index: Devuelve una lista de todos los productos en la base de datos.
store: Almacena un nuevo producto en la base de datos. Valida los datos recibidos antes de almacenarlos.
show: Devuelve un producto específico según su ID.
update:Actualiza los datos de un producto específico según su ID. Valida los datos recibidos antes de actualizarlos.
destroy: Elimina un producto específico según su ID.
En resumen, este controlador es una parte importante de una aplicación de Laravel que maneja productos y permite a los usuarios realizar operaciones CRUD en la base de datos de productos.