Blog de programación, errores, soluciones

laravel / controller – controladores en laravel

En este post veremos como crear un controlador en laravel y como usarlo.

intro

Laravel usa algo parecido al patrón MVC, (modelo, vista, controlador). En este modelo el controlador se encarga de aceptar los datos pasados por input en nuestra vista y convertirlos en comandos para nuestro model, incluso se encarga de comunicarse con el modelo y enviar datos a la vista.

En Laravel sería algo así la ruta llama al controlador y este intercambia datos con el modelo o llama una vista o hace las 2 cosas, o por el contrario evitamos el controlador y hacemos esto desde la ruta sin usar un controlador algo no muy recomendable (en caso de querer llamar utilizar la ruta llame una vista como mucho por ejemplo una landing page).

Empezaré creando un proyecto para los ejemplos:

Me crearé un proyecto nuevo y lo nombraré proyecto_de_ejemplo.

Project folder
 laravel new proyecto_de_ejemplo

¿Como crear un controlador?

Para crear un controlador en Laravel podemos escribirlo a mano o crearlo con el comando php artisan make:controller Nombre_del_controlador en consola dentro de la carpeta de nuestro proyecto.

Project folder
php artisan make:controller ClienteController
Controller created successfully

Hay varias variantes de este comando. Pero primero veamos el resultado de haber corrido el comando php artisan make:controller ClienteController

¿Donde esta mi controlador?

Para ver el controlador tenemos que ir a la carpeta de nuestro proyecto y luego a App>Http>Controllers>ClienteController.php para abrir la carpeta lo puede hacer con cualquier editor de código (por ejemplo Visual Studio Code , Atom, etc) el siguiente código es lo creado por el comando anterior.

app/Http/Controllers/ClineteController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ClienteController extends Controller
{
    //
}

Controlador invocable

Continuemos con php artisan make:controller ShowHome --invokable como puede ver en este siguiente ejemplo no es necesario que un controlador tenga la palabra controller aunque se usa para diferenciar que es un controlador

Project Folder
php artisan make:controller ShowHome --invocable

Haremos igual que en el controlador anterior y iremos a ShowHome

app/Http/Controllers/ShowHome.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ShowHome extends Controller
{
    /**
     * Handle the incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @return \Illuminate\Http\Response
     */
    public function __invoke(Request $request)
    {
        //
    }
}

Un controlador invokable es un controlador que solo realizara una acción y solo esa acción. Todo lo que este dentro de la función invoke es lo que hará

CRUD en Laravel

Ahora veamos otra comando que le podemos agregar y es realmente útil. Para mostrar este lo que hace este comando borraré el controlador ClienteController.php Luego correremos el comando:

Project Folder
php artisan make:controller ClienteController --resource
app/Http/Controllers/ClienteController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ClienteController extends Controller
{
    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * 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  int  $id
     * @return \Illuminate\Http\Response
     */
    public function show($id)
    {
        //
    }

    /**
     * Show the form for editing the specified resource.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function edit($id)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, $id)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  int  $id
     * @return \Illuminate\Http\Response
     */
    public function destroy($id)
    {
        //
    }
}

Como puede ver al usar este comando hemos creado un controller para un sistema CRUD(significa crear, leer, modificar, borrar) o un sistema ABM(altas, bajas, modificar).

Pero todabia esto no es lo único que podemos hacer con resource por otra parte podemos hacer las rutas(ver rutas en laravel) pertinentes para este controller de una manera muy simple. En routes>web.php agregaremos la siguiente linea

routes/web.php
Route::resource('cliente', 'ClienteController');

le damos guardar y inspeccionamos las rutas que tenemos con php artisan route:list y vea la siguiente imagen.

todas las rutas en mi proyecto

Esto es útil, realmente útil, vea que escribir la linea anterior es el equivalente a escribir 7 lineas de rutas y esto aun puede verse aun mas ventajoso cuando tenemos varios controllers usando resource.

Si tenemos varios controlladores en que hemos usado –resource podemos hacer lo siguiente.

routes/web.php
Route::resources([
    'cliente' => 'ClienteController',
    'usuario' => 'UsuarioController'
]);

¿Excelente no?. Pues no aun podemos hacer mas con los controladores y con –resource. Borrare una vez mas el controlador y usare el siguiente comando en la consola
php artisan make:controller ClienteController –resource –model=Cliente

Al correr este comando no solo creara el controlador también nos preguntara si deseamos crear el modelo(ver modelos en laravel) pero además veamos el código generado

app/Http/Controllers/ClienteController.php
<?php

namespace App\Http\Controllers;

use App\Cliente;
use Illuminate\Http\Request;

class ClienteController extends Controller
{*
     * @return \Illuminate\Http\Response
     */
    public function create()
    {
        //
    }

    /**
     * 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\Cliente  $cliente
     * @return \Illuminate\Http\Response
     */
    public function show(Cliente $cliente)
    {
        //
    }

    /**
     * Display a listing of the resource.
     *
     * @return \Illuminate\Http\Response
     */
    public function index()
    {
        //
    }

    /**
     * Show the form for creating a new resource.
     
    /**
     * Show the form for editing the specified resource.
     *
     * @param  \App\Cliente  $cliente
     * @return \Illuminate\Http\Response
     */
    public function edit(Cliente $cliente)
    {
        //
    }

    /**
     * Update the specified resource in storage.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Cliente  $cliente
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Cliente $cliente)
    {
        //
    }

    /**
     * Remove the specified resource from storage.
     *
     * @param  \App\Cliente  $cliente
     * @return \Illuminate\Http\Response
     */
    public function destroy(Cliente $cliente)
    {
        //
    }
}

como puede ver a agregado Cliente $cliente esto quiere decir que estamos haciendo una inyección de el modelo como parámetro directamente podemos hacer cualquier operación con $cliente desde aquí.

Ayudame: Por favor deja un comentario antes de irte, tu opinión es bienvenida. Si te gusta el contenido comparte.
Last 4 post in same category