{"id":60848,"date":"2022-12-16T14:15:12","date_gmt":"2022-12-16T13:15:12","guid":{"rendered":"https:\/\/kinsta.com\/es\/?p=60848&#038;preview=true&#038;preview_id=60848"},"modified":"2025-01-17T14:40:39","modified_gmt":"2025-01-17T13:40:39","slug":"rutas-laravel","status":"publish","type":"post","link":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/","title":{"rendered":"Dominar las Rutas de Laravel"},"content":{"rendered":"<p>Cuando se trata del backend, los desarrolladores acaban encontr\u00e1ndose con las rutas. Las rutas pueden considerarse la columna vertebral del backend, ya que cada solicitud que recibe el servidor se redirige a un controlador a trav\u00e9s de una lista de rutas que asigna solicitudes a controladores o acciones.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-laravel\/\">Laravel<\/a> nos oculta muchos detalles de implementaci\u00f3n y viene con un mont\u00f3n de az\u00facar sint\u00e1ctico para ayudar tanto a los desarrolladores nuevos como a los experimentados a desarrollar sus aplicaciones web.<\/p>\n<p>Echemos un vistazo a c\u00f3mo gestionar rutas en Laravel.<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc><\/p>\n<h2>Rutas backend y Cross-Site Scripting en Laravel<\/h2>\n<p>En un servidor existen rutas p\u00fablicas y privadas. Las rutas p\u00fablicas pueden ser motivo de preocupaci\u00f3n debido a la posibilidad de cross-site scripting (XSS), un tipo de <a href=\"https:\/\/kinsta.com\/es\/blog\/inyeccion-sql\/\">ataque de inyecci\u00f3n<\/a> que puede dejarte a ti y a tus usuarios <a href=\"https:\/\/kinsta.com\/es\/blog\/tipos-de-malware\/\">vulnerables ante actores maliciosos<\/a>. El problema es que un usuario puede ser redirigido desde una ruta que no requiera un identificador de sesi\u00f3n a otra que s\u00ed lo requiera, y seguir teniendo acceso sin el identificador.<\/p>\n\n<p>La forma m\u00e1s sencilla de resolver este problema es imponer una nueva cabecera HTTP, a\u00f1adiendo \u00abreferrer\u00bb a la ruta para mitigar este escenario:<\/p>\n<pre><code class=\"language-php\">'main' =&gt; [\n  'path' =&gt; '\/main',\n  'referrer' =&gt; 'required,refresh-empty',\n  'target' =&gt; ControllerDashboardController::class . '::mainAction'\n]<\/code><\/pre>\n<h2>Enrutamiento b\u00e1sico de Laravel<\/h2>\n<p>En <a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-9\/\">Laravel<\/a>, las rutas permiten enrutar la solicitud adecuada al controlador deseado. La Ruta Laravel m\u00e1s b\u00e1sica acepta un Identificador Uniforme de Activos (la ruta de tu ruta) y un cierre que puede ser tanto una funci\u00f3n como una clase.<\/p>\n<p>En Laravel, las rutas se crean dentro de los archivos <strong>web.php<\/strong> y <strong>api.php<\/strong>. Laravel viene con dos rutas por defecto: una para la WEB y otra para la API.<\/p>\n<p>Estas rutas residen en la carpeta <strong>routes\/<\/strong>, pero se cargan en <strong>Providers\/RouteServiceProvider.php<\/strong>.<\/p>\n<figure style=\"width: 875px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/laravel-route-provider-default.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/laravel-route-provider-default.png\" alt=\"Estado por defecto del proveedor de servicios de rutas de Laravel.\" width=\"875\" height=\"628\"><\/a><figcaption class=\"wp-caption-text\">Estado por defecto del proveedor de servicios de rutas de Laravel.<\/figcaption><\/figure>\n<p>En lugar de hacer esto, podemos cargar las rutas directamente dentro de <strong>RouteServiceProvider<\/strong>.<strong>php<\/strong>, salt\u00e1ndonos por completo la carpeta <strong>routes\/<\/strong>.<\/p>\n<figure style=\"width: 875px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/loading-laravel-routes-directly.png\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/kinsta.com\/wp-content\/uploads\/2022\/10\/loading-laravel-routes-directly.png\" alt=\"Carga de rutas Laravel directamente en el proveedor.\" width=\"875\" height=\"413\"><\/a><figcaption class=\"wp-caption-text\">Carga de rutas Laravel directamente en el proveedor.<\/figcaption><\/figure>\n<h3>Redirecciones<\/h3>\n<p>Cuando definimos una ruta, normalmente querremos redirigir al usuario que accede a ella, y las razones para ello var\u00edan mucho. Puede ser porque es una ruta obsoleta y hemos cambiado el backend o el servidor, o puede ser porque queremos instalar la <a href=\"https:\/\/kinsta.com\/es\/docs\/configuracion-de-usuario\/inicio-de-sesion\/#enable-twofactor-authentication-2fa\">autenticaci\u00f3n de dos factores (2FA)<\/a>, etc.<\/p>\n<p>Laravel tiene una forma sencilla de hacer esto. Gracias a la simplicidad del framework, podemos utilizar el m\u00e9todo redirect en la fachada Route, que acepta la ruta de entrada y la ruta a la que redirigir.<\/p>\n<p>Opcionalmente, podemos dar el c\u00f3digo de estado de la redirecci\u00f3n como tercer par\u00e1metro. El m\u00e9todo <code>permanentRedirect<\/code> har\u00e1 lo mismo que el m\u00e9todo <code>redirect<\/code>, excepto que siempre devolver\u00e1 un <a href=\"https:\/\/kinsta.com\/es\/blog\/codigos-de-estado-de-http\/\">c\u00f3digo de estado 301<\/a>:<\/p>\n<pre><code class=\"language-php\">\/\/ Simple redirect\nRoute::redirect(\"\/class\", \"\/myClass\");\n\n\/\/ Redirect with custom status\nRoute::redirect(\"\/home\", \"\/office\", 305);\n\n\/\/ Route redirect with 301 status code\nRoute::permanentRedirect(\"\/home\", \"office\");<\/code><\/pre>\n<p>Dentro de las rutas de redirecci\u00f3n tenemos prohibido utilizar las palabras clave \u00abdestino\u00bb y \u00abestado\u00bb como par\u00e1metros, ya que est\u00e1n reservadas por Laravel.<\/p>\n<pre><code class=\"language-php\">\/\/ Illegal to use\nRoute::redirect(\"\/home\", \"\/office\/{status}\");<\/code><\/pre>\n<h3>Vistas<\/h3>\n<p>Las vistas son los archivos .<strong>blade.<\/strong><strong>php<\/strong> que utilizamos para renderizar el frontend de nuestra aplicaci\u00f3n Laravel. Utiliza el motor de plantillas blade, y es la forma por defecto de construir una aplicaci\u00f3n full-stack utilizando \u00fanicamente Laravel.<\/p>\n<p>Si queremos que nuestra ruta devuelva una vista, podemos utilizar simplemente el m\u00e9todo view de la fachada Route. Acepta un par\u00e1metro de ruta, un nombre de vista y una matriz opcional de valores que se pasar\u00e1n a la vista.<\/p>\n<pre><code class=\"language-php\">\/\/ When the user accesses my-domain.com\/homepage\n\/\/ the homepage.blade.php file will be rendered\nRoute::view(\"\/homepage\", \"homepage\");<\/code><\/pre>\n<p>Supongamos que nuestra vista quiere decir \u00abHola, <code>{name}<\/code>\u00bb pasando una matriz opcional con ese par\u00e1metro. Podemos hacerlo con el siguiente c\u00f3digo (si el par\u00e1metro que falta es necesario en la vista, la petici\u00f3n fallar\u00e1 y lanzar\u00e1 un error):<\/p>\n<pre><code class=\"language-php\">Route::view('\/homepage', 'homepage', ['name' =&gt; \"Kinsta\"]);<\/code><\/pre>\n<h3>Lista de rutas<\/h3>\n<p>A medida que tu aplicaci\u00f3n crece en tama\u00f1o, tambi\u00e9n lo har\u00e1 el n\u00famero de peticiones que necesitan ser enrutadas. Y con un gran volumen de informaci\u00f3n puede venir una gran confusi\u00f3n.<\/p>\n<p>Aqu\u00ed es donde <code>artisan route:list command<\/code> puede ayudarnos. Proporciona una visi\u00f3n general de todas las rutas que est\u00e1n definidas en la aplicaci\u00f3n, sus middlewares y controladores.<\/p>\n<pre><code class=\"language-php\">php artisan route:list<\/code><\/pre>\n<p>Mostrar\u00e1 una lista de todas las rutas sin los middlewares. Para ello, debemos utilizar la bandera <code>-v<\/code>:<\/p>\n<pre><code class=\"language-php\"><code>php artisan route:list -v<\/code><\/code><\/pre>\n<p>En una situaci\u00f3n en la que puedas estar utilizando un dise\u00f1o basado en dominios en el que tus rutas tengan nombres espec\u00edficos en sus rutas, puedes hacer uso de las capacidades de filtrado de este comando de la siguiente manera:<\/p>\n<pre><code class=\"language-php\">php artisan route:list \u2013path=api\/account<\/code><\/pre>\n<p>Esto mostrar\u00e1 s\u00f3lo las rutas que empiecen por <strong>api\/cuenta<\/strong>. Por otra parte, podemos indicar a Laravel que excluya o incluya rutas definidas por terceros utilizando las opciones <code>\u2013except-vendor<\/code> o <code>\u2013only-vendor<\/code>.<\/p>\n<h2>Par\u00e1metros de ruta<\/h2>\n<p>A veces puede que necesites capturar segmentos de la URI con la ruta, como un ID de usuario o un token. Podemos hacerlo definiendo un par\u00e1metro de ruta, que siempre se encierra entre llaves (<code>{}<\/code>) y s\u00f3lo debe constar de caracteres alfab\u00e9ticos.<\/p>\n<p>Si nuestras rutas tienen dependencias dentro de sus llamadas de retorno, el contenedor de servicios de Laravel las inyectar\u00e1 autom\u00e1ticamente:<\/p>\n<pre><code class=\"language-php\">use IlluminateHttpRequest;\nuse Controllers\/DashboardController;\nRoute::post('\/dashboard\/{id}, function (Request $request, string $id) {\n  return 'User:' . $id;\n}\nRoute::get('\/dashboard\/{id}, DashboardController.php);<\/code><\/pre>\n<h3>Par\u00e1metros requeridos<\/h3>\n<p>Los par\u00e1metros obligatorios de Laravel son par\u00e1metros de las rutas que no podemos omitir al realizar una llamada. De lo contrario, se producir\u00e1 un error:<\/p>\n<pre><code class=\"language-php\">Route::post(\"\/gdpr\/{userId}\", GetGdprDataController.php\");<\/code><\/pre>\n<p>Ahora dentro del <strong>GetGdprDataController.<\/strong> php tendremos acceso directo al par\u00e1metro<strong> $userId<\/strong>.<\/p>\n<pre><code class=\"language-php\">public function __invoke(int $userId) {\n  \/\/ Use the userId that we received\u2026\n}<\/code><\/pre>\n<p>Una ruta puede tener cualquier n\u00famero de par\u00e1metros. Se inyectan en las retrollamadas\/controladores de la ruta en funci\u00f3n del orden en que aparecen:<\/p>\n<pre><code class=\"language-php\"> \/\/ api.php\nRoute::post('\/gdpr\/{userId}\/{userName}\/{userAge}', GetGdprDataController.php);\n\/\/ GetGdprDataController.php\npublic function __invoke(int $userId, string $userName, int $userAge) {\n  \/\/ Use the parameters\u2026\n}<\/code><\/pre>\n<h3>Par\u00e1metros opcionales<\/h3>\n<p>En una situaci\u00f3n en la que queramos hacer algo en una ruta cuando s\u00f3lo est\u00e9 presente un par\u00e1metro y nada m\u00e1s, sin afectar a toda la aplicaci\u00f3n, podemos a\u00f1adir un par\u00e1metro opcional. Estos par\u00e1metros opcionales se denotan por el <code>?<\/code> que se les a\u00f1ade:<\/p>\n<pre><code class=\"language-php\"> Route::get('\/user\/{age?}', function (int $age = null) {\n  if (!$age) Log::info(\"User doesn't have age set\");\n  else Log::info(\"User's age is \" . $age);\n}\nRoute::get('\/user\/{name?}', function (int $name = \"John Doe\") {\n  Log::info(\"User's name is \" . $name);\n}<\/code><\/pre>\n<h3 id=\"route-wildcard\" class=\"has-anchor-hash\">Wildcard de ruta<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-9\/\">Laravel<\/a> nos proporciona una forma de filtrar c\u00f3mo deben ser nuestros par\u00e1metros opcionales o requeridos.<\/p>\n<p>Digamos que queremos una cadena de un ID de usuario. Podemos validarlo as\u00ed a nivel de ruta utilizando el m\u00e9todo <code>where<\/code>.<\/p>\n<p>El m\u00e9todo <code>where<\/code> acepta el nombre del par\u00e1metro y la regla regex que se aplicar\u00e1 en la validaci\u00f3n. Por defecto, toma el primer par\u00e1metro, pero si tenemos muchos, podemos pasar un array con el nombre del par\u00e1metro como clave y la regla como valor, y Laravel los analizar\u00e1 todos por nosotros:<\/p>\n<pre><code class=\"language-php\">Route::get('\/user\/{age}', function (int $age) {\n  \/\/\n}-&gt;where('age', '[0-9]+');\nRoute::get('\/user\/{age}', function (int $age) {\n  \/\/\n}-&gt;where('[0-9]+');\nRoute::get('\/user\/{age}\/{name}', function (int $age, string $name) {\n  \/\/\n}-&gt;where(['age' =&gt; '[0-9]+', 'name' =&gt; '[a-z][A-z]+');<\/code><\/pre>\n<p>Podemos llevar esto un paso m\u00e1s all\u00e1 y aplicar la validaci\u00f3n en todas las rutas de nuestra aplicaci\u00f3n utilizando el m\u00e9todo <code>pattern<\/code> en la fachada <code>Route<\/code>:<\/p>\n<pre><code class=\"language-php\"> Route::pattern('id', '[0-9]+');<\/code><\/pre>\n<p>Esto validar\u00e1 cada par\u00e1metro <code>id<\/code> con esta expresi\u00f3n regex. Y una vez que la definamos, se aplicar\u00e1 autom\u00e1ticamente a todas las rutas que utilicen ese nombre de par\u00e1metro.<\/p>\n<p>Como podemos ver, Laravel est\u00e1 utilizando el car\u00e1cter <code>\/<\/code> como separador en la ruta. Si queremos utilizarlo en la ruta, tenemos que permitir expl\u00edcitamente que forme parte de nuestro marcador de posici\u00f3n utilizando una expresi\u00f3n regex <code>where<\/code>.<\/p>\n<pre><code class=\"language-php\"> Route::get('\/find\/{query}', function ($query) {\n  \/\/\n})-&gt;where('query', , '.*');<\/code><\/pre>\n<p>El \u00fanico inconveniente es que s\u00f3lo se admitir\u00e1 en el \u00faltimo segmento de la ruta.<\/p>\n<h2>Rutas con nombre<\/h2>\n<p>Como su nombre indica, podemos asignar nombres a las rutas, lo que facilita la <a href=\"https:\/\/kinsta.com\/es\/blog\/que-es-una-url\/\">generaci\u00f3n de URLs<\/a> o redirecciones para rutas espec\u00edficas.<\/p>\n<h3>C\u00f3mo crear rutas con nombre<\/h3>\n<p>Una forma sencilla de crear una ruta con nombre la proporciona el m\u00e9todo <code>name<\/code> encadenado en la fachada <code>Route<\/code>. El nombre de cada ruta debe ser \u00fanico:<\/p>\n<pre><code class=\"language-php\"> Route::get('\/', function () {\n})-&gt;name(\"homepage\");<\/code><\/pre>\n<h2>Grupos de rutas<\/h2>\n<p>Los grupos de rutas te permiten compartir atributos de ruta, como los middlewares, entre un gran n\u00famero de rutas sin necesidad de redefinirlos en todas y cada una de ellas.<\/p>\n<h3>Middleware<\/h3>\n<p>Asignar un middleware a todas las rutas que tenemos nos permite combinarlas en un grupo, primero utilizando el m\u00e9todo <code>group<\/code>. Hay que tener en cuenta que los middlewares se ejecutan en el orden en que se aplican al grupo:<\/p>\n<pre><code class=\"language-php\"> Route:middleware(['AuthMiddleware', 'SessionMiddleware'])-&gt;group(function () {\n  Route::get('\/', function() {} );\n  Route::post('\/upload-picture', function () {} );\n});<\/code><\/pre>\n<h3>Controladores<\/h3>\n<p>Cuando un grupo utiliza el mismo controlador, podemos utilizar el m\u00e9todo <code>controller<\/code> para definir el controlador com\u00fan para todas las rutas de ese grupo. Ahora tenemos que especificar el m\u00e9todo al que llamar\u00e1 la ruta.<\/p>\n<pre><code class=\"language-php\"> Route::controller(UserController::class)-&gt;group(function () {\n  Route::get('\/orders\/{userId}', 'getOrders');\n  Route::post('\/order\/{id}', 'postOrder');\n});<\/code><\/pre>\n<h3>Rutas de subdominio<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/es\/blog\/subdominios-wordpress\/\">Un nombre de subdominio<\/a> es una informaci\u00f3n adicional que se a\u00f1ade al principio del nombre de dominio de un sitio web. Esto permite a los sitios web separar y organizar su contenido para funciones espec\u00edficas, como tiendas online, blogs, presentaciones, etc., del resto del sitio web.<\/p>\n<p>Nuestras rutas pueden utilizarse para gestionar el enrutamiento de subdominios. Podemos capturar el dominio y una parte del subdominio para utilizarlos en nuestro controlador y ruta. Con la ayuda del m\u00e9todo <code>domain<\/code> de la fachada <code>Route<\/code>, podemos agrupar nuestras rutas bajo un \u00fanico dominio:<\/p>\n<pre><code class=\"language-php\"> Route::domain('{store}.enterprise.com')-&gt;group(function() {\n  Route::get('order\/{id}', function (Account $account, string $id) {\n    \/\/ Your Code\n  }\n});<\/code><\/pre>\n<h3>Prefijos y prefijos de nombre<\/h3>\n<p>Siempre que tengamos un grupo de rutas, en lugar de modificarlas una a una, podemos hacer uso de las utilidades extra que proporciona Laravel, como <code>prefix<\/code> y <code>name<\/code> en la fachada <code>Route<\/code>.<\/p>\n<p>El m\u00e9todo <code>prefix<\/code> se puede utilizar para prefijar cada ruta del grupo con una URI dada, y el m\u00e9todo <code>name<\/code> se puede utilizar para prefijar cada nombre de ruta con una cadena dada.<\/p>\n<p>Esto nos permite crear cosas nuevas, como rutas de administrador, sin tener que modificar todos y cada uno de los nombres o prefijos para identificarlas:<\/p>\n<pre><code class=\"language-php\"> Route::name('admin.\")-&gt;group(function() {\n  Route::prefix(\"admin\")-&gt;group(function() {\n    Route::get('\/get')-&gt;name('get');\n    Route::put('\/put')-&gt;name(put');\n    Route::post('\/post')-&gt;name('post');\n  });\n});<\/code><\/pre>\n<p>Ahora los URI de estas rutas ser\u00e1n <code>admin\/get<\/code>, <code>admin\/put<\/code>, <code>admin\/post<\/code>, y los nombres <code>admin.get<\/code>, <code>admin.put<\/code>, y <code>admin.post<\/code>.<\/p>\n<h2>Almacenamiento en cach\u00e9 de rutas<\/h2>\n<p>Cuando despliegues la aplicaci\u00f3n en servidores de producci\u00f3n, un buen <a href=\"https:\/\/kinsta.com\/es\/blog\/desarrollador-de-laravel\/\">desarrollador de Laravel<\/a> aprovechar\u00e1 la cach\u00e9 de rutas de Laravel.<\/p>\n<h3>\u00bfQu\u00e9 es la cach\u00e9 de rutas?<\/h3>\n<p>La cach\u00e9 de rutas reduce el tiempo que se tarda en registrar todas las rutas de la aplicaci\u00f3n.<\/p>\n<p>Ejecutando <code>php artisan route:cache<\/code> se genera una instancia de <code>Illuminate\/Routing\/RouteCollection<\/code>, y tras ser codificada, la salida serializada se escribe en <code>bootstrap\/cache.routes.php<\/code>.<\/p>\n<p>Ahora cualquier otra petici\u00f3n <a href=\"https:\/\/kinsta.com\/es\/blog\/laravel-caching\/\">cargar\u00e1 este archivo de cach\u00e9<\/a> si existe. Por lo tanto, nuestra aplicaci\u00f3n ya no tiene que analizar y convertir las entradas del archivo de rutas en objetos <code>Illuminate\/Routing\/Route<\/code> en <code>Illuminate\/Routing\/RouteCollection<\/code>.<\/p>\n<h3>Por qu\u00e9 es importante utilizar el cach\u00e9 de rutas<\/h3>\n<p>Si no utilizas la funci\u00f3n de cach\u00e9 de rutas que proporciona Laravel, tu aplicaci\u00f3n corre el riesgo de funcionar m\u00e1s lentamente de lo que podr\u00eda, lo que a su vez podr\u00eda disminuir las ventas, la retenci\u00f3n de usuarios y la <a href=\"https:\/\/kinsta.com\/es\/blog\/insignias-de-confianza\/\">confianza en tu marca<\/a>.<\/p>\n<p>Dependiendo de la escala de tu proyecto y de cu\u00e1ntas rutas haya, ejecutar un simple comando de almacenamiento en cach\u00e9 de rutas puede <a href=\"https:\/\/kinsta.com\/es\/blog\/prueba-de-velocidad\/\">acelerar tu aplicaci\u00f3n<\/a> entre un 130% y un 500%, una ganancia enorme sin apenas esfuerzo.<\/p>\n<h2>Resumen<\/h2>\n<p>El enrutamiento es la columna vertebral del desarrollo backend. El framework Laravel destaca en esto al proporcionar una forma verbosa de definir y gestionar rutas.<\/p>\n\n<p>El desarrollo puede ser realmente accesible para todos y ayudar a <a href=\"https:\/\/kinsta.com\/es\/blog\/rendimiento-laravel\/\">acelerar una aplicaci\u00f3n<\/a> s\u00f3lo por el hecho de estar construida en Laravel.<\/p>\n<p>\u00bfQu\u00e9 otros trucos y consejos has encontrado en relaci\u00f3n con las rutas de Laravel? \u00a1H\u00e1znoslo saber en la secci\u00f3n de comentarios!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cuando se trata del backend, los desarrolladores acaban encontr\u00e1ndose con las rutas. Las rutas pueden considerarse la columna vertebral del backend, ya que cada solicitud que &#8230;<\/p>\n","protected":false},"author":267,"featured_media":60849,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[766,1222,1223],"topic":[1303],"class_list":["post-60848","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-laravel","tag-laravel-routes","tag-php-framework","topic-laravel"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v24.6 (Yoast SEO v24.6) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Dominar las Rutas de Laravel<\/title>\n<meta name=\"description\" content=\"El enrutamiento es uno de los aspectos m\u00e1s importantes de cualquier aplicaci\u00f3n backend. Usa esta gu\u00eda para comprender las rutas y el enrutamiento de Laravel.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dominar las Rutas de Laravel\" \/>\n<meta property=\"og:description\" content=\"El enrutamiento es uno de los aspectos m\u00e1s importantes de cualquier aplicaci\u00f3n backend. Usa esta gu\u00eda para comprender las rutas y el enrutamiento de Laravel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinsta.es\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-16T13:15:12+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-01-17T13:40:39+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1460\" \/>\n\t<meta property=\"og:image:height\" content=\"730\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Coman Cosmin\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:description\" content=\"El enrutamiento es uno de los aspectos m\u00e1s importantes de cualquier aplicaci\u00f3n backend. Usa esta gu\u00eda para comprender las rutas y el enrutamiento de Laravel.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg\" \/>\n<meta name=\"twitter:creator\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:site\" content=\"@Kinsta_ES\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Coman Cosmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/\"},\"author\":{\"name\":\"Coman Cosmin\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\"},\"headline\":\"Dominar las Rutas de Laravel\",\"datePublished\":\"2022-12-16T13:15:12+00:00\",\"dateModified\":\"2025-01-17T13:40:39+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/\"},\"wordCount\":1879,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg\",\"keywords\":[\"laravel\",\"laravel routes\",\"php framework\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/\",\"name\":\"Dominar las Rutas de Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/es\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg\",\"datePublished\":\"2022-12-16T13:15:12+00:00\",\"dateModified\":\"2025-01-17T13:40:39+00:00\",\"description\":\"El enrutamiento es uno de los aspectos m\u00e1s importantes de cualquier aplicaci\u00f3n backend. Usa esta gu\u00eda para comprender las rutas y el enrutamiento de Laravel.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg\",\"width\":1460,\"height\":730},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/es\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/es\/secciones\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Dominar las Rutas de Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/es\/#website\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Soluciones de alojamiento premium, r\u00e1pidas y seguras\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/es\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/es\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/es\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/es\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinsta.es\/\",\"https:\/\/x.com\/Kinsta_ES\",\"https:\/\/www.instagram.com\/kinstahosting\/\",\"https:\/\/www.linkedin.com\/company\/kinsta\/\",\"https:\/\/www.pinterest.com\/kinstahosting\/\",\"https:\/\/www.youtube.com\/c\/Kinsta\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\",\"name\":\"Coman Cosmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g\",\"caption\":\"Coman Cosmin\"},\"description\":\"Cosmin Coman is a technology writer and developer with over 3 years of experience. Apart from writing for Kinsta, he has assisted in research at nuclear physics facilities and universities. Tech-savvy and integrated into the community, he always comes up with innovative solutions.\",\"url\":\"https:\/\/kinsta.com\/es\/blog\/author\/comancosmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dominar las Rutas de Laravel","description":"El enrutamiento es uno de los aspectos m\u00e1s importantes de cualquier aplicaci\u00f3n backend. Usa esta gu\u00eda para comprender las rutas y el enrutamiento de Laravel.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/","og_locale":"es_ES","og_type":"article","og_title":"Dominar las Rutas de Laravel","og_description":"El enrutamiento es uno de los aspectos m\u00e1s importantes de cualquier aplicaci\u00f3n backend. Usa esta gu\u00eda para comprender las rutas y el enrutamiento de Laravel.","og_url":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinsta.es\/","article_published_time":"2022-12-16T13:15:12+00:00","article_modified_time":"2025-01-17T13:40:39+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg","type":"image\/jpeg"}],"author":"Coman Cosmin","twitter_card":"summary_large_image","twitter_description":"El enrutamiento es uno de los aspectos m\u00e1s importantes de cualquier aplicaci\u00f3n backend. Usa esta gu\u00eda para comprender las rutas y el enrutamiento de Laravel.","twitter_image":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg","twitter_creator":"@Kinsta_ES","twitter_site":"@Kinsta_ES","twitter_misc":{"Escrito por":"Coman Cosmin","Tiempo de lectura":"10 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/"},"author":{"name":"Coman Cosmin","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da"},"headline":"Dominar las Rutas de Laravel","datePublished":"2022-12-16T13:15:12+00:00","dateModified":"2025-01-17T13:40:39+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/"},"wordCount":1879,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg","keywords":["laravel","laravel routes","php framework"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/","url":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/","name":"Dominar las Rutas de Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/es\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg","datePublished":"2022-12-16T13:15:12+00:00","dateModified":"2025-01-17T13:40:39+00:00","description":"El enrutamiento es uno de los aspectos m\u00e1s importantes de cualquier aplicaci\u00f3n backend. Usa esta gu\u00eda para comprender las rutas y el enrutamiento de Laravel.","breadcrumb":{"@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#primaryimage","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2022\/12\/laravel-routes.jpg","width":1460,"height":730},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/es\/blog\/rutas-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/es\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/es\/secciones\/laravel\/"},{"@type":"ListItem","position":3,"name":"Dominar las Rutas de Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/es\/#website","url":"https:\/\/kinsta.com\/es\/","name":"Kinsta\u00ae","description":"Soluciones de alojamiento premium, r\u00e1pidas y seguras","publisher":{"@id":"https:\/\/kinsta.com\/es\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/es\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/es\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/es\/","logo":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/es\/wp-content\/uploads\/sites\/8\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/es\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinsta.es\/","https:\/\/x.com\/Kinsta_ES","https:\/\/www.instagram.com\/kinstahosting\/","https:\/\/www.linkedin.com\/company\/kinsta\/","https:\/\/www.pinterest.com\/kinstahosting\/","https:\/\/www.youtube.com\/c\/Kinsta"]},{"@type":"Person","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da","name":"Coman Cosmin","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/kinsta.com\/es\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ede71ae86b38c64bcf00417fd17a686b?s=96&d=mm&r=g","caption":"Coman Cosmin"},"description":"Cosmin Coman is a technology writer and developer with over 3 years of experience. Apart from writing for Kinsta, he has assisted in research at nuclear physics facilities and universities. Tech-savvy and integrated into the community, he always comes up with innovative solutions.","url":"https:\/\/kinsta.com\/es\/blog\/author\/comancosmin\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/60848","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/users\/267"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/comments?post=60848"}],"version-history":[{"count":11,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/60848\/revisions"}],"predecessor-version":[{"id":61207,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/posts\/60848\/revisions\/61207"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/translations\/dk"},{"href":"https:\/\/kinsta.com\/es\/wp-json\/kinsta\/v1\/posts\/60848\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media\/60849"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/media?parent=60848"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/tags?post=60848"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/es\/wp-json\/wp\/v2\/topic?post=60848"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}