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';
});

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

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

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

<i class="far fa-folder-open"></i>/routes/web.php
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.

<i class="far fa-folder-open"></i>/routes/web.php
Route::get('user/{id}', function ($id) {
    return 'User '.$id;
});

A continuación un ejemplo de mas de un parametro

<i class="far fa-folder-open"></i>/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 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:

<i class="far fa-folder-open"></i>/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 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

<i class="far fa-folder-open"></i>/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 generacion de URLs o la redireccion a una ruta especifica.

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

<i class="far fa-folder-open"></i>/routes/web.php
Route::get('user/profile', function () {
    //
})->name('profile');

hacerlo en un controlador( ver laravel controllers ).

< laravel 8 <i class="far fa-folder-open"></i>/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 deberemo especificar la ruta de la siguiente manera

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

Ademas 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 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 siguiente:

<i class="far fa-folder-open"></i>/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

<i class="far fa-folder-open"></i>/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 seria una cuenta de un usuario

<i class="far fa-folder-open"></i>/routes/web.php
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

<i class="far fa-folder-open"></i>/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

<i class="far fa-folder-open"></i>/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