{"id":55760,"date":"2022-12-16T10:11:14","date_gmt":"2022-12-16T13:11:14","guid":{"rendered":"https:\/\/kinsta.com\/pt\/?p=55760&#038;preview=true&#038;preview_id=55760"},"modified":"2023-08-22T03:40:04","modified_gmt":"2023-08-22T06:40:04","slug":"rotas-no-laravel","status":"publish","type":"post","link":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/","title":{"rendered":"Dominando as Rotas no Laravel"},"content":{"rendered":"<p>Quando se trata do backend, os desenvolvedores encontram eventualmente rotas. As rotas podem ser consideradas o espinha dorsal do backend, j\u00e1 que cada requisi\u00e7\u00e3o que o servidor recebe \u00e9 redirecionada para um controlador atrav\u00e9s de uma lista de roteamento que mapeia as requisi\u00e7\u00f5es para os controladores ou a\u00e7\u00f5es.<\/p>\n<p><a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-laravel\/\">Laravel<\/a> esconde muitos detalhes de implementa\u00e7\u00e3o e vem com muito a\u00e7\u00facar sint\u00e1ctico para ajudar tanto desenvolvedores novos quanto experientes a desenvolver seus aplicativos web.<\/p>\n<p>Daremos uma olhada de perto em como gerenciar as rotas no Laravel.<\/p>\n<div><\/div><kinsta-auto-toc heading=\"Table of Contents\" exclude=\"last\" list-style=\"arrow\" selector=\"h2\" count-number=\"-1\"><\/kinsta-auto-toc>\n<h2>Routing e Cross-Site Scripting no Laravel<\/h2>\n<p>Em um servidor, existem tanto rotas p\u00fablicas quanto privadas. Rotas p\u00fablicas podem ser um motivo de preocupa\u00e7\u00e3o devido \u00e0 possibilidade de cross-site scripts (XSS), um tipo de <a href=\"https:\/\/kinsta.com\/pt\/blog\/injecao-sql\/\">ataque de inje\u00e7\u00e3o<\/a> que pode deixar voc\u00ea e seus usu\u00e1rios <a href=\"https:\/\/kinsta.com\/pt\/blog\/tipos-de-malwares\/\">vulner\u00e1veis a agentes mal-intencionados<\/a>.<\/p>\n<p>O problema \u00e9 que um usu\u00e1rio pode ser redirecionado de uma rota que n\u00e3o requer um token de sess\u00e3o para uma que o fa\u00e7a &#8211; e ele ainda ter\u00e1 acesso sem o token.<\/p>\n\n<p>A maneira mais simples de resolver este problema \u00e9 aplicar um novo cabe\u00e7alho HTTP, adicionando &#8220;referrer&#8221; \u00e0 rota para mitigar este cen\u00e1rio:<\/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>Rotas b\u00e1sicas no Laravel<\/h2>\n<p>No <a href=\"https:\/\/kinsta.com\/pt\/blog\/laravel-9\/\">Laravel<\/a>, as rotas permitem que os usu\u00e1rios encaminhem a solicita\u00e7\u00e3o apropriada ao controlador desejado. A Rota Laravel mais b\u00e1sica aceita um Identificador Uniforme de Ativos (seu caminho de rota) e um fechamento que pode ser tanto uma fun\u00e7\u00e3o quanto uma classe.<\/p>\n<p>As rotas s\u00e3o criadas dentro dos arquivos <strong>web.php<\/strong> e <strong>api.php<\/strong>. Laravel vem com duas rotas por padr\u00e3o: uma para a WEB e outra para a API.<\/p>\n<p>Estas rotas residem nas <strong>rotas\/ <\/strong>pasta, mas elas s\u00e3o carregadas no arquivo <strong>Providers\/RouteServiceProvider.php<\/strong>.<\/p>\n<figure id=\"attachment_134912\" aria-describedby=\"caption-attachment-134912\" 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 padr\u00e3o do prestador de servi\u00e7os de rota do Laravel\" width=\"875\" height=\"628\"><\/a><figcaption id=\"caption-attachment-134912\" class=\"wp-caption-text\">Estado padr\u00e3o do prestador de servi\u00e7os de rota do Laravel.<\/figcaption><\/figure>\n<p>Ao inv\u00e9s de fazer isso, podemos carregar as rotas diretamente no <strong>RouteServiceProvider.php<\/strong>, pulando completamente as <strong>rotas\/<\/strong> pasta.<\/p>\n<figure id=\"attachment_134913\" aria-describedby=\"caption-attachment-134913\" 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=\"Carregando as rotas do Laravel diretamente no provedor\" width=\"875\" height=\"413\"><\/a><figcaption id=\"caption-attachment-134913\" class=\"wp-caption-text\">Carregando as rotas do Laravel diretamente no provedor.<\/figcaption><\/figure>\n<h3>Redirecionamentos<\/h3>\n<p>Quando definimos uma rota, geralmente queremos redirecionar o usu\u00e1rio que tenha acesso, e as raz\u00f5es para isso variam muito. Pode ser porque \u00e9 uma rota depreciada e mudamos o backend ou o servidor, ou pode ser porque queremos instalar <a href=\"https:\/\/kinsta.com\/pt\/docs\/configuracoes-do-usuario\/fazendo-login\/#enable-twofactor-authentication-2fa\">autentica\u00e7\u00e3o de dois fatores (2FA)<\/a>, e assim por diante.<\/p>\n<p>Laravel tem uma maneira f\u00e1cil de fazer isso. Gra\u00e7as \u00e0 simplicidade da framework, podemos usar o m\u00e9todo de redirecionamento no frontend da Rota, que aceita a rota de entrada e a rota para ser redirecionada.<\/p>\n<p>Opcionalmente, podemos dar o c\u00f3digo de status para o redirecionamento como o terceiro par\u00e2metro. O m\u00e9todo <code>permanentRedirect<\/code> far\u00e1 o mesmo que o m\u00e9todo <code>redirect<\/code>, exceto que ele sempre retornar\u00e1 um <a href=\"https:\/\/kinsta.com\/pt\/blog\/lista-codigos-status-http\/\">c\u00f3digo de status 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 das rotas de redirecionamento, estamos proibidos de usar as palavras-chave &#8220;destination&#8221; e &#8220;status&#8221; como par\u00e2metros, pois elas s\u00e3o reservadas pelo Laravel.<\/p>\n<pre><code class=\"language-php\">\/\/ Illegal to use\nRoute::redirect(\"\/home\", \"\/office\/{status}\");<\/code><\/pre>\n<h3>Visualiza\u00e7\u00f5es<\/h3>\n<p>As visualiza\u00e7\u00f5es s\u00e3o os arquivos .<strong>blade.php<\/strong> que usamos para renderizar o frontend da nossa aplicativo Laravel. Ele usa o mecanismo de templates de l\u00e2mina, e \u00e9 a maneira padr\u00e3o para construir um aplicativo de stack completo usando apenas Laravel.<\/p>\n<p>Se quisermos que nossa rota retorne uma visualiza\u00e7\u00e3o, podemos simplesmente usar o m\u00e9todo de visualiza\u00e7\u00e3o na frontend da Rota. Ele aceita um par\u00e2metro de rota, um nome de visualiza\u00e7\u00e3o e um conjunto opcional de valores a serem passados para a visualiza\u00e7\u00e3o.<\/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>Vamos assumir que nossa visualiza\u00e7\u00e3o quer dizer &#8220;Ol\u00e1, <code>{name}<\/code>&#8220;, passando um array opcional com esse par\u00e2metro. Podemos fazer exatamente isso com o seguinte c\u00f3digo (se o par\u00e2metro ausente for requerido na visualiza\u00e7\u00e3o, o pedido falhar\u00e1 e lan\u00e7ar\u00e1 um erro):<\/p>\n<pre><code class=\"language-php\">Route::view('\/homepage', 'homepage', ['name' =&gt; \"Kinsta\"]);<\/code><\/pre>\n<h3>Lista de rotas<\/h3>\n<p>\u00c0 medida que seu aplicativo crescer, tamb\u00e9m crescer\u00e1 o n\u00famero de solicita\u00e7\u00f5es que precisam ser encaminhadas. E com um grande volume de informa\u00e7\u00f5es pode haver uma grande confus\u00e3o.<\/p>\n<p>Aqui \u00e9 onde o <code>artisan route:list command<\/code> pode nos ajudar. Ele fornece uma vis\u00e3o geral de todas as rotas definidas no aplicativo, seus middlewares e controllers.<\/p>\n<pre><code class=\"language-php\">php artisan route:list<\/code><\/pre>\n<p>Ele exibir\u00e1 uma lista de todas as rotas sem os middlewares. Para isso, temos que usar a flag <code>-v<\/code>:<\/p>\n<pre><code class=\"language-php\"><code>php artisan route:list -v<\/code><\/code><\/pre>\n<p>Em uma situa\u00e7\u00e3o em que voc\u00ea pode estar usando um projeto orientado por dom\u00ednio onde suas rotas t\u00eam nomes espec\u00edficos em seus caminhos, voc\u00ea pode usar as capacidades de filtragem deste comando dessa forma:<\/p>\n<pre><code class=\"language-php\">php artisan route:list \u2013path=api\/account<\/code><\/pre>\n<p>Isto mostrar\u00e1 apenas as rotas que come\u00e7am com <strong>api\/account<\/strong>.<\/p>\n<p>Por outro lado, podemos instruir Laravel de excluir ou incluir rotas definidas por terceiros, usando as op\u00e7\u00f5es <code>\u2013except-vendor<\/code> ou <code>\u2013only-vendor<\/code>.<\/p>\n<h2>Par\u00e2metros de rotas<\/h2>\n<p>Algumas vezes voc\u00ea pode precisar capturar segmentos do URI com a rota, como um ID de usu\u00e1rio ou um token. Podemos fazer isso definindo um par\u00e2metro de rota, que est\u00e1 sempre enclausurado em chaves em colchete (<code>{}<\/code>) e deve consistir apenas de caracteres alfab\u00e9ticos.<\/p>\n<p>Se nossas rotas tiverem alguma depend\u00eancia em callbacks, o cont\u00eainer de servi\u00e7o do Laravel ir\u00e1 inclu\u00ed-los automaticamente:<\/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\u00e2metros requeridos<\/h3>\n<p>Os par\u00e2metros obrigat\u00f3rios do Laravel s\u00e3o par\u00e2metros de rota que n\u00e3o podemos omitir ao fazer uma chamada. Caso contr\u00e1rio, um erro ser\u00e1 retornado:<\/p>\n<pre><code class=\"language-php\">Route::post(\"\/gdpr\/{userId}\", GetGdprDataController.php\");<\/code><\/pre>\n<p>Agora dentro do <strong>GetGdprDataController.php<\/strong> teremos acesso direto ao par\u00e2metro<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>Uma rota pode tomar qualquer n\u00famero de par\u00e2metros. Eles s\u00e3o injetados nos callbacks\/controllers da rota com base na ordem em que s\u00e3o listados:<\/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\u00e2metros opcionais<\/h3>\n<p>Em uma situa\u00e7\u00e3o em que queremos fazer algo em uma rota quando apenas um par\u00e2metro est\u00e1 presente e nada mais, tudo sem afetar todo o aplicativo, podemos adicionar um par\u00e2metro opcional. Estes par\u00e2metros opcionais s\u00e3o indicados pelo <code>?<\/code> anexado a eles:<\/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>Rotas wildcard<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/pt\/blog\/laravel-9\/\">Laravel<\/a> permite que voc\u00ea filtre como os par\u00e2metros opcionais ou obrigat\u00f3rios s\u00e3o exibidos.<\/p>\n<p>Digamos que queremos uma sequ\u00eancia de identifica\u00e7\u00e3o do usu\u00e1rio. Podemos valid\u00e1-lo assim no n\u00edvel da rota usando o m\u00e9todo <code>where<\/code>.<\/p>\n<p>O m\u00e9todo <code>where<\/code> aceita o nome do par\u00e2metro e a regra regex que ser\u00e1 aplicada na valida\u00e7\u00e3o. Por padr\u00e3o, ele aceita o primeiro par\u00e2metro, mas se tivermos muitos, podemos passar um array com o nome do par\u00e2metro como a chave e a regra como o valor, e Laravel ir\u00e1 analis\u00e1-los todos para n\u00f3s:<\/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 levar isso um passo adiante e aplicar a valida\u00e7\u00e3o em todas as rotas em nosso aplicativo, usando o m\u00e9todo <code>pattern<\/code> no frontend <code>Route<\/code>:<\/p>\n<pre><code class=\"language-php\"> Route::pattern('id', '[0-9]+');<\/code><\/pre>\n<p>Isso ir\u00e1 valer cada par\u00e2metro <code>id<\/code> com esta express\u00e3o regex. E uma vez definida, ela ser\u00e1 automaticamente aplicada a todas as rotas usando esse nome de par\u00e2metro.<\/p>\n<p>Como podemos ver, Laravel est\u00e1 usando o personagem <code>\/<\/code> como um separador no caminho. Se quisermos us\u00e1-lo no caminho, temos que permitir explicitamente que ele fa\u00e7a parte do nosso espa\u00e7o reservado usando um 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>A \u00fanica desvantagem \u00e9 que ele ser\u00e1 suportado apenas no \u00faltimo segmento de rota.<\/p>\n<h2>Rotas nomeadas<\/h2>\n<p>Como o nome sugere, podemos nomear rotas, o que torna conveniente <a href=\"https:\/\/kinsta.com\/pt\/blog\/o-que-e-uma-url\/\">gerar URLs<\/a> ou redirecionar para rotas espec\u00edficas.<\/p>\n<h3>Como criar rotas nomeadas<\/h3>\n<p>Uma maneira simples de criar uma rota nomeada \u00e9 fornecida pelo m\u00e9todo <code>name<\/code> acorrentado no frontend <code>Route<\/code>. O nome de cada rota deve ser \u00fanico:<\/p>\n<pre><code class=\"language-php\"> Route::get('\/', function () {\n})-&gt;name(\"homepage\");<\/code><\/pre>\n<h2>Grupos de rotas<\/h2>\n<p>Grupos de rotas permitem que voc\u00ea compartilhe atributos de rotas como middlewares por in\u00fameras rotas sem a necessidade de redefini-la em cada rota.<\/p>\n<h3>Middleware<\/h3>\n<p>A atribui\u00e7\u00e3o de um middleware a todas as rotas que temos nos permite combin\u00e1-las em um grupo, primeiro usando o m\u00e9todo <code>group<\/code>. Uma coisa a ser considerada \u00e9 que os middlewares s\u00e3o executados na ordem em que s\u00e3o aplicados ao 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>Controller<\/h3>\n<p>Quando um grupo utiliza o mesmo controlador, podemos usar o m\u00e9todo <code>controller<\/code> para definir o controlador comum para todas as rotas dentro desse grupo. Agora temos que especificar o m\u00e9todo que a rota chamar\u00e1.<\/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>Rotas do subdom\u00ednio<\/h3>\n<p><a href=\"https:\/\/kinsta.com\/pt\/blog\/subdominio-wordpress\/\">Um nome de subdom\u00ednio<\/a> \u00e9 uma parte de informa\u00e7\u00e3o adicional adicionado ao in\u00edcio do nome de dom\u00ednio de um site. Isso permite que os sites separem e organizem seu conte\u00fado para fun\u00e7\u00f5es espec\u00edficas, tais como lojas on-line, blogs, apresenta\u00e7\u00f5es, etc., do resto do site.<\/p>\n<p>Nossas rotas podem ser usadas para lidar com o roteamento de subdom\u00ednios. Podemos pegar o dom\u00ednio e uma parte do subdom\u00ednio para uso em nosso controlador e rota. Com a ajuda do m\u00e9todo <code>domain<\/code> no frontend <code>Route<\/code>, podemos agrupar nossas rotas sob um \u00fanico dom\u00ednio:<\/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>Prefixos e prefixos de nome<\/h3>\n<p>Sempre que temos um grupo de rotas, ao inv\u00e9s de modific\u00e1-las uma a uma, podemos recorrer \u00e0s utilidades extras que Laravel fornece, tais como <code>prefix<\/code> e <code>name<\/code> no frontend <code>Route<\/code>.<\/p>\n<p>O m\u00e9todo <code>prefix<\/code> pode ser usado para prefixar cada rota no grupo com um determinado URI, e o m\u00e9todo <code>name<\/code> pode ser usado para prefixar cada nome de rota com uma determinada string.<\/p>\n<p>Isso nos permite criar coisas novas como rotas administrativas sem ser necess\u00e1rio modificar cada nome ou prefixo para identific\u00e1-las:<\/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>Agora as URIs para estas rotas ser\u00e3o <code>admin\/get<\/code>, <code>admin\/put<\/code>, <code>admin\/post<\/code>, e os nomes <code>admin.get<\/code>, <code>admin.put<\/code>, e <code>admin.post<\/code>.<\/p>\n<h2>Cache de rotas<\/h2>\n<p>Ao implantar o aplicativo nos servidores de produ\u00e7\u00e3o, um bom <a href=\"https:\/\/kinsta.com\/pt\/blog\/desenvolvedor-laravel\/\">desenvolvedor Laravel<\/a> aproveitar\u00e1 o cache de rotas no Laravel.<\/p>\n<h3>O que \u00e9 cache de rotas?<\/h3>\n<p>O cache de rotas diminui a quantidade de tempo que leva para registrar todas as rotas do aplicativo.<\/p>\n<p>Rodando <code>php artisan route:cache<\/code> \u00e9 gerada uma inst\u00e2ncia de <code>Illuminate\/Routing\/RouteCollection<\/code>, e ap\u00f3s ser codificada, a sa\u00edda serializada \u00e9 escrita para <code>bootstrap\/cache.routes.php<\/code>.<\/p>\n<p>Agora qualquer outra solicita\u00e7\u00e3o ir\u00e1 <a href=\"https:\/\/kinsta.com\/pt\/blog\/cache-do-laravel\/\">carregar este arquivo de cache<\/a>, se ele existir. Portanto, nosso aplicativo n\u00e3o tem mais que analisar e converter entradas do arquivo de rota em objetos <code>Illuminate\/Routing\/Route<\/code> em <code>Illuminate\/Routing\/RouteCollection<\/code>.<\/p>\n<h3>Por que \u00e9 importante usar o cache de rotas<\/h3>\n<p>Ao n\u00e3o usar o recurso de cache de rotas que Laravel fornece, seu aplicativo corre o risco de funcionar mais lentamente do que poderia ser, o que, por sua vez, poderia diminuir as vendas, a reten\u00e7\u00e3o de usu\u00e1rios e a <a href=\"https:\/\/kinsta.com\/pt\/blog\/selos-de-seguranca-101\/\">confian\u00e7a em sua marca<\/a>.<\/p>\n<p>Dependendo da escala do seu projeto e de quantas rotas existem, executar um simples comando de cache de rotas pode <a href=\"https:\/\/kinsta.com\/pt\/blog\/teste-de-velocidade-do-seu-site\/\">acelerar seu aplicativo<\/a>\u00a0em qualquer lugar de 130% a 500% &#8211; um ganho maci\u00e7o por quase nenhum esfor\u00e7o.<\/p>\n<h2>Resumo<\/h2>\n<p>O roteamento \u00e9 a espinha dorsal do desenvolvimento de backend. A framework do Laravel se sobressai nisso ao fornecer uma maneira direta de definir e gerenciar rotas.<\/p>\n<p>O desenvolvimento pode de fato ser acess\u00edvel a todos e ajudar <a href=\"https:\/\/kinsta.com\/pt\/blog\/desempenho-laravel\/\">acelerar um aplicativo<\/a> apenas em virtude de ser constru\u00edda no Laravel.<\/p>\n<p>Que outros truques e dicas voc\u00ea j\u00e1 encontrou com rela\u00e7\u00e3o \u00e0s rotas no Laravel? Informe na se\u00e7\u00e3o de coment\u00e1rios!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando se trata do backend, os desenvolvedores encontram eventualmente rotas. As rotas podem ser consideradas o espinha dorsal do backend, j\u00e1 que cada requisi\u00e7\u00e3o que o &#8230;<\/p>\n","protected":false},"author":267,"featured_media":56182,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_kinsta_gated_content":false,"_kinsta_gated_content_redirect":"","footnotes":""},"tags":[416,883,884],"topic":[984],"class_list":["post-55760","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","tag-laravel","tag-laravel-routes","tag-php-frameworks","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>Dominando as Rotas no Laravel<\/title>\n<meta name=\"description\" content=\"Rotas \u00e9 um dos aspectos mais importantes de qualquer aplicativo backend. Use este guia para obter uma compreens\u00e3o firme das rotas e roteamento do 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\/pt\/blog\/rotas-no-laravel\/\" \/>\n<meta property=\"og:locale\" content=\"pt_PT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Dominando as Rotas no Laravel\" \/>\n<meta property=\"og:description\" content=\"Rotas \u00e9 um dos aspectos mais importantes de qualquer aplicativo backend. Use este guia para obter uma compreens\u00e3o firme das rotas e roteamento do Laravel.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/\" \/>\n<meta property=\"og:site_name\" content=\"Kinsta\u00ae\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/kinstapt\/\" \/>\n<meta property=\"article:published_time\" content=\"2022-12-16T13:11:14+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-08-22T06:40:04+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg\" \/>\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=\"Rotas \u00e9 um dos aspectos mais importantes de qualquer aplicativo backend. Use este guia para obter uma compreens\u00e3o firme das rotas e roteamento do Laravel.\" \/>\n<meta name=\"twitter:image\" content=\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg\" \/>\n<meta name=\"twitter:creator\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:site\" content=\"@kinsta_pt\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Coman Cosmin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo estimado de leitura\" \/>\n\t<meta name=\"twitter:data2\" content=\"9 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/\"},\"author\":{\"name\":\"Coman Cosmin\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\"},\"headline\":\"Dominando as Rotas no Laravel\",\"datePublished\":\"2022-12-16T13:11:14+00:00\",\"dateModified\":\"2023-08-22T06:40:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/\"},\"wordCount\":1843,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg\",\"keywords\":[\"laravel\",\"laravel routes\",\"php frameworks\"],\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/\",\"url\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/\",\"name\":\"Dominando as Rotas no Laravel\",\"isPartOf\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg\",\"datePublished\":\"2022-12-16T13:11:14+00:00\",\"dateModified\":\"2023-08-22T06:40:04+00:00\",\"description\":\"Rotas \u00e9 um dos aspectos mais importantes de qualquer aplicativo backend. Use este guia para obter uma compreens\u00e3o firme das rotas e roteamento do Laravel.\",\"breadcrumb\":{\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#breadcrumb\"},\"inLanguage\":\"pt-PT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#primaryimage\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg\",\"width\":1460,\"height\":730,\"caption\":\"Dominando as Rotas no Laravel\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/kinsta.com\/pt\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Laravel\",\"item\":\"https:\/\/kinsta.com\/pt\/topicos\/laravel\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Dominando as Rotas no Laravel\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/kinsta.com\/pt\/#website\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"name\":\"Kinsta\u00ae\",\"description\":\"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura\",\"publisher\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/kinsta.com\/pt\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-PT\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/kinsta.com\/pt\/#organization\",\"name\":\"Kinsta\",\"url\":\"https:\/\/kinsta.com\/pt\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"contentUrl\":\"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg\",\"width\":500,\"height\":500,\"caption\":\"Kinsta\"},\"image\":{\"@id\":\"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/kinstapt\/\",\"https:\/\/x.com\/kinsta_pt\",\"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\/pt\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da\",\"name\":\"Coman Cosmin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-PT\",\"@id\":\"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/comancosmin\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Dominando as Rotas no Laravel","description":"Rotas \u00e9 um dos aspectos mais importantes de qualquer aplicativo backend. Use este guia para obter uma compreens\u00e3o firme das rotas e roteamento do 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\/pt\/blog\/rotas-no-laravel\/","og_locale":"pt_PT","og_type":"article","og_title":"Dominando as Rotas no Laravel","og_description":"Rotas \u00e9 um dos aspectos mais importantes de qualquer aplicativo backend. Use este guia para obter uma compreens\u00e3o firme das rotas e roteamento do Laravel.","og_url":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/","og_site_name":"Kinsta\u00ae","article_publisher":"https:\/\/www.facebook.com\/kinstapt\/","article_published_time":"2022-12-16T13:11:14+00:00","article_modified_time":"2023-08-22T06:40:04+00:00","og_image":[{"width":1460,"height":730,"url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg","type":"image\/jpeg"}],"author":"Coman Cosmin","twitter_card":"summary_large_image","twitter_description":"Rotas \u00e9 um dos aspectos mais importantes de qualquer aplicativo backend. Use este guia para obter uma compreens\u00e3o firme das rotas e roteamento do Laravel.","twitter_image":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg","twitter_creator":"@kinsta_pt","twitter_site":"@kinsta_pt","twitter_misc":{"Escrito por":"Coman Cosmin","Tempo estimado de leitura":"9 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#article","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/"},"author":{"name":"Coman Cosmin","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da"},"headline":"Dominando as Rotas no Laravel","datePublished":"2022-12-16T13:11:14+00:00","dateModified":"2023-08-22T06:40:04+00:00","mainEntityOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/"},"wordCount":1843,"commentCount":0,"publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg","keywords":["laravel","laravel routes","php frameworks"],"inLanguage":"pt-PT","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/","url":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/","name":"Dominando as Rotas no Laravel","isPartOf":{"@id":"https:\/\/kinsta.com\/pt\/#website"},"primaryImageOfPage":{"@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#primaryimage"},"image":{"@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#primaryimage"},"thumbnailUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg","datePublished":"2022-12-16T13:11:14+00:00","dateModified":"2023-08-22T06:40:04+00:00","description":"Rotas \u00e9 um dos aspectos mais importantes de qualquer aplicativo backend. Use este guia para obter uma compreens\u00e3o firme das rotas e roteamento do Laravel.","breadcrumb":{"@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#breadcrumb"},"inLanguage":"pt-PT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/"]}]},{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#primaryimage","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2022\/12\/rotas-no-laravel.jpeg","width":1460,"height":730,"caption":"Dominando as Rotas no Laravel"},{"@type":"BreadcrumbList","@id":"https:\/\/kinsta.com\/pt\/blog\/rotas-no-laravel\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/kinsta.com\/pt\/"},{"@type":"ListItem","position":2,"name":"Laravel","item":"https:\/\/kinsta.com\/pt\/topicos\/laravel\/"},{"@type":"ListItem","position":3,"name":"Dominando as Rotas no Laravel"}]},{"@type":"WebSite","@id":"https:\/\/kinsta.com\/pt\/#website","url":"https:\/\/kinsta.com\/pt\/","name":"Kinsta\u00ae","description":"Solu\u00e7\u00f5es de hospedagem Premium, r\u00e1pida e segura","publisher":{"@id":"https:\/\/kinsta.com\/pt\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/kinsta.com\/pt\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-PT"},{"@type":"Organization","@id":"https:\/\/kinsta.com\/pt\/#organization","name":"Kinsta","url":"https:\/\/kinsta.com\/pt\/","logo":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/","url":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","contentUrl":"https:\/\/kinsta.com\/pt\/wp-content\/uploads\/sites\/3\/2023\/12\/kinsta-logo.jpeg","width":500,"height":500,"caption":"Kinsta"},"image":{"@id":"https:\/\/kinsta.com\/pt\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/kinstapt\/","https:\/\/x.com\/kinsta_pt","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\/pt\/#\/schema\/person\/aa307e51da3929c7aead1f4b4439f3da","name":"Coman Cosmin","image":{"@type":"ImageObject","inLanguage":"pt-PT","@id":"https:\/\/kinsta.com\/pt\/#\/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\/pt\/blog\/author\/comancosmin\/"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/55760","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/users\/267"}],"replies":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/comments?post=55760"}],"version-history":[{"count":8,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/55760\/revisions"}],"predecessor-version":[{"id":56289,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/posts\/55760\/revisions\/56289"}],"alternate":[{"embeddable":true,"hreflang":"en","title":"English","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/en"},{"embeddable":true,"hreflang":"it","title":"Italian","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/it"},{"embeddable":true,"hreflang":"pt","title":"Portuguese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/pt"},{"embeddable":true,"hreflang":"fr","title":"French","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/fr"},{"embeddable":true,"hreflang":"de","title":"German","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/de"},{"embeddable":true,"hreflang":"ja","title":"Japanese","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/jp"},{"embeddable":true,"hreflang":"nl","title":"Dutch","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/nl"},{"embeddable":true,"hreflang":"es","title":"Spanish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/es"},{"embeddable":true,"hreflang":"sv","title":"Swedish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/se"},{"embeddable":true,"hreflang":"da","title":"Danish","href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/translations\/dk"},{"href":"https:\/\/kinsta.com\/pt\/wp-json\/kinsta\/v1\/posts\/55760\/tree"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media\/56182"}],"wp:attachment":[{"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/media?parent=55760"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/tags?post=55760"},{"taxonomy":"topic","embeddable":true,"href":"https:\/\/kinsta.com\/pt\/wp-json\/wp\/v2\/topic?post=55760"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}