Blog de programaci贸n, errores, soluciones

laravel / controller – controladores en laravel

Esta vez empezar茅 en c贸mo crear un controlador en laravel y luego explicare como funciona dicho controlador.

Me creare un proyecto nuevo y le podre de nombre proyecto_de_ejemplo. Para hacer esto lo har茅 con la linea de comandos laravel new proyecto_de_ejemplo.

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.

creando un controlador

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

Para ver el controlador tenemos que ir a la carpeta de nuestro proyecto y luego a App>Http>Controllers>ClientController 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.

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class ClienteController extends Controller
{
    //
}

Veamos como crear el controlador pero con otros comandos mas elavorados.

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

creando un invoke controller

Haremos igual que en el controlador anterior y iremos a ShowHome

<?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)
    {
        //
    }
}

Ahora se preguntara 驴que es esto? 驴para que me sirve este controlador?

Bien un controlador invoke 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 borrare el controlador ClienteController. Luego correremos el comando php artisan make:controller ClienteController --resource.

Veamos que hemos creado.

<?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

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.

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 ademas veamos el c贸digo generado

<?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.