Chose Language:
Author: Admin/Publisher |not finished |not checked

Routing en Laravel

No se puede hablar de Laravel sin hablar de routing o enrutamiento, las rutas determinan que controlador se usara y también pueden definir qué vista se usara, que middleware usaremos y algunas que otras cosas más.

La forma más 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.

(project-folder)/routes/web.php
Route::get('hello', function () {
    return 'hola';
});

Probémoslo en el localhost:8000 al correr php artisan serve en console y vamos a [path]localhost:8000/hello[/path] el resultado será "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 función anónima del ejemplo anterior podemos hacer lo que sea, pero no es la idea tener código en las rutas que realizan tareas 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, también podemos ponerle un 3er parametro el cual le podemos pasar variable.

(project-folder)/routes/web.php
Route::view('/home', 'home');

Como ejemplo de 3er parámetro supongamos que estamos haciendo un manual o how to use.

(project-folder)/routes/web.php
Route::view('/use', 'use',['index' => 'summary']);
//estoy pasando una variable index la cual el valor es summary

Pasar parámetros por rutas

Para pasar parámetros a por las rutas lo que hay que hacer es encerrar la variable deseada con { } la función, recibirá el valor del id y se hará el código que se necesite hacer.

(project-folder)/routes/web.php
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

A continuación un ejemplo de más de un parámetro

(project-folder)/routes/web.php
Route::get('hombres/{category}/{product}', function ($category,$product) {
    return 'esta en el catalog de '.$category.' '.$product;
});

Que ocurre en este ejemplo, los parámetros se pasan en el orden que están a la función function y esto es importante, no importa el nombre que le pongamos lo que está pasando, está en el orden en que están los parámetros de la ruta {category} y {product}, por lo tanto, si yo hiciera esto estaría recibiendo el valor del parámetro category en la variable producto y viceversa. Ejemplo siguiente:

(project-folder)/routes/web.php
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 sería el siguiente

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

Parámetros opcionales

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

(project-folder)/routes/web.php
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 generación de URLs o la redirección a una ruta específica.

Para crear una ruta nombrada, podemos hacerlo con el método name.

(project-folder)/routes/web.php
Route::get('user/profile', function () {
    //
})->name('profile');

Hacerlo en un controlador(ver laravel controllers ).

< laravel 8 (project-folder)/routes/web.php
Route::get('user/profile','UserProfileController@show')->name('profile');
desde laravel 8

A partir de Laravel 8 ya no podremos hacer un enrutamiento de la siguiente manera.

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

En cambio, deberemos especificar la ruta de la siguiente manera

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

Además de esto deberemos de traer la clase con use

use App\Http\Controllers\UserProfileController;

Generar ruta a una ruta nombrada

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

Agrupando las rutas – Route Groups

Hacer grupos de ruta nos permite darles atributos, sin tener que dárselos individualmente una a una, estos pueden ser middleware, namespaces. Además 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 más de una a varias rutas se puede hacer lo siguiente:

(project-folder)/routes/web.php
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

(project-folder)/routes/web.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 sería una cuenta de un usuario

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

Prefix Route Group

Cuando la ruta se está agrupando por prefix, la estamos agrupando por el prefijo de URL. Las rutas en el ejemplo siguiente serían /admin/users y /admin/groups

(project-folder)/routes/web.php
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

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


Category: laravel
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category