Routing en Laravel

No se puede hablar de laravel sin hablar de routing o enrutamiento, las rutas determinan que controllador se usara y también pueden definir que vista se usara, que middleware usaremos y algunas que otras cosas mas.

La forma mas sencilla de una ruta es la que acepta una URI y una función closure o anónima como desee llamarla. A continuación un ejemplo.

Route::get('hello', function () {
    return 'hola';
});

Probemos-lo en el localhost:8000 al correr php artisan serve en console y vamos a localhost:8000/hello el resultado sera «hola» en pantalla.

en laravel las rutas las definimos en la carpeta routes dentro de esta carpeta se encuentran los siguientes archivos web.php, api.php(APIs), channel.php (se usa en broadcasting) y console.php(ruta para comandos de consola creados por el usuario).

Por ahora nos basaremos en el archivo web.php ya que en este es donde definimos nuestras rutas para nuestra interfaz web.

Como puede pensar en esta funcion anonima de el ejemplo anterior podemos hacer lo que sea pero no es la idea tener código en las rutas que realizen cosas que debería hacer un controller

en este post solo daremos ejemplos de cosas que podemos hacer con las rutas.

También podemos hacer una ruta para una vista simple.

Lo podemos hacer de la siguiente manera en el primer parametro de Route::view ponemos la url en el segundo la vista, tambien podemos ponerle un 3er parametro el cual le podemos pasar variable.

Route::view('/home', 'home');

como ejemplo de 3er parametro supongamos que estamos haciendo un manual o how to use.

Route::view('/use', 'use',['index' => 'summary']);
//estoy pasando una variable index la cual el valor es summary

Pasar parametros por rutas

Para pasar parametros a por las rutas lo que hay que hacer es encerrar la variabl deseada con { } la funcion recivira el valor de id, y se hara el codigo que se necesite hacer.

Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

A continuación un ejemplo de mas de un parametro

Route::get('hombres/{category}/{product}', function ($category,$product) {
    return 'esta en el catalog de '.$category.' '.$product;
});

Que ocurre en este ejemplo, los parametros se pasan en el orden que estan a function y esto es importante no importa el nombre que le pongamos lo que esta pasando esta en el orden en que estan los parametros { } por lo tanto si yo hiciera esto estaría recibiendo el valor de el parametro category en la variable producto y viceversa. Ejemplo siguiente:

Route::get('hombres/{category}/{product}', function ($product,$category) {
    return 'esta en el catalog de '.$category.' '.$product;
});

probemos esto en localhost:8000 corriendo php artisan serve, el resultado de esto debería darnos intercambiado por ejemplo si ponemos en nuestra ruta localhost:8000/hombres/deportiva/camisetas el resultado seria el siguiente

esta en el catalog de camisetas deportiva y lo que queríamos era esta en el catalog de deportiva camiseta

Parametros opcionales

Supongamos que tengo un usuario y su nombre es opcional por ejemplo un usuario no logueado

Route::get('user/{name?}', function ($name = 'guest') {
   //no estoy recibiendo un nombre asi que hago que el nombre por defecto sea guest(visitante)
    return $name;
});

Rutas nombradas – Named routes

el nombrar las rutas nos permite la generacion de URLs o la redireccion a una ruta especifica.

para crear una ruta nombrada, podemos hacerlo con el metodo name.

Route::get('user/profile', function () {
    //
})->name('profile');

hacerlo en un controlador( ver laravel controllers ).

Route::get('user/profile','UserProfileController@show')->name('profile');

Generar ruta a una ruta nombrada

esto lo podemos hacer con el siguiente comando route('profile'); en caso de querer redireccionar a esa ruta retrun redirect()->route('profile');

Agrupando las rutas – Route Groups

Hacer grupos de ruta nos permite darles atributos, sin tener que darselos individialmente una a una, estos pueden ser middleware, namespaces. Ademas de estos podemos agrupar rutas por subdominio, prefijos por url, prefijos por nombre.

Otra cosa que podemos hacer con el Agrupamiento es hacer un (Route Group) Agrupamiento dentro de otro.

Route Group Middleware

Para asignar un middleware o mas de una a varias rutas se puede hacer lo siguinte

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        // Uses first & second Middleware
    });

    Route::get('user/profile', function () {
        // Uses first & second Middleware
    });
});

Namespaces Route Group

Agrupa por espacios de nombre(Namespaces) en PHP

Route::namespace('Admin')->group(function () {
    // Controllers Within The "App\Http\Controllers\Admin" Namespace
});

Domain Route Group

Todas las rutas que tengan ese subdominio en este caso el subdominio seria una cuenta de un usuario

Route::domain('{account}.myapp.com')->group(function () {
    Route::get('user/{id}', function ($account, $id) {
        //
    });
});

Prefix Route Group

Cuando la ruta se esta agrupando por prefix, la estamos agrupando por el prefijo de url. Las rutas en el ejemplo siguiente serian /admin/users y /admin/groups

Route::prefix('admin')->group(function () {
    Route::get('users', function () {
        // Matches The "/admin/users" URL
    });
    Route::get('groups', function () {
        // Matches The "/admin/groups" URL
    });
});

Name Route Group

Agrupa rutas de nombre con un cierto prefijo en este caso el prefijo es admin por lo tanto la Ruta es para una ruta nombrada admin.users

Route::name('admin.')->group(function () {
    Route::get('users', function () {
        // Route assigned name "admin.users"...
    })->name('users');
});


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