Laravel 11: quase pronto...
Tags: laravel, news, php, programming
Published: 2024-01-20 00:05:45

A versão 11 do Laravel será disponibilizada oficialmente nas próximas semanas e trará mudanças significativas.

---
> Versão do PHP

Para começar, a versão mínima necessária do PHP para executar as aplicações subiu da atual 8.1 para 8.2. 

Uma das melhorias advindas com a nova versão do PHP é que agora, é possível marcar parâmetros de função como **sensíveis**.

Para uma melhor compreensão dessa melhoria, imagine um cenário onde a aplicação lança uma exceção. Em muitas linguagens de programação, o rastreamento dessas exceções serve para identificarmos erros na aplicação possibilitando sua correção.

Entretanto, esse rastreamento pode mostrar dados sensíveis, como usuário ou número de cartão de crédito por exemplo, na eventualidade de terem sido passados via parâmetro para o método que lançou a exceção.

E é justamente para ajudar a mitigar esse tipo de situação que a versão 8.2 do PHP trouxe o atributo **#[\SensitiveParameter]**.

Quando o compilador do PHP encontrar um parâmetro com esse atributo, o valor do parâmetro será omitido do rastreamento de pilha, caso ocorra uma exceção.

O trecho de código a seguir ilustra a utilização do novo atributo e o resultado obtido:

```php
<?php

function exemplo(
    $diretorio,
    #[\SensitiveParameter] $usuario
) {
    throw new \Exception('Error');
}

exemplo('\app\docs', 'Alfred');

/*
Fatal error: Uncaught Exception: Error in test.php:6
Stack trace:
#0 test.php(10): test('\app\docs', Object(SensitiveParameterValue))
#1 {main}
thrown in test.php on line 6
*/
```
Note que, ao apresentar a exceção, o parâmetro decorado com o atributo **#[\SensitiveParameter]** tem o seu valor ocultado.

---
> Arquivos de rotas no Laravel

Até a versão 10, as novas instalações traziam no mínimo 4 arquivos para configuração de rotas:
* `api.php`: como o próprio nome diz, fazemos a configuração das rotas de APIs REST
* `channels.php`: este configura as rotas de broadcasting dentro da aplicação
* `console.php`: caso sua aplicação receba chamadas através de rotinas de console, este é o arquivo a ser configurado
* `web.php`: este arquivo configura as rotas para quando a aplicação é totalmente suportada pelo Laravel, tanto no **backend** quando **frontend**.

A partir da versão 11 somente os arquivos `console.php` e `web.php` estarão presentes em novas instalações.

Os demais arquivos poderão ser adicionados utilizando o **Artisan**, como mostrado a seguir:

```php
php artisan install:api
```
Ao ser executado, o arquivo `api.php` será criado na pasta **\routes**.

O comando também fará a instalação do [Laravel Sanctum](https://laravel.com/docs/10.x/sanctum#main-content), facilitando a implementação da autenticação de APIs REST.

---
> DD/Dump

Um programador PHP que não conheça o comando "dd" não é programador PHP.... :joy:

No desenvolvimento de aplicações o ato de *debugar* faz parte do dia a dia dos programadores e tem como principal objetivo entender o fluxo das rotinas.

No mundo web as coisas são um pouco diferentes e essa tarefa é ligeiramente mais complexa.

Para começar, nem todas as ferramentas (leia-se editor de código) possuem as funcionalidades necessárias para *debugar* aplicações PHP, e as que tem geralmente são pagas.

Já para as gratuitas é preciso adicionar plug-ins ou extensões para conseguir *debugar*.

E no PHP é comum avaliarmos variáveis e classes através da função `dd`. 

Abaixo podemos ver a sintaxe da função:

```
dd($variavel);
```

Ao ser invocada, a função retorna para a página o valor avaliado, interrompendo a aplicação em seguida.

Com o objetivo de facilitar a vida dos desenvolvedores, a versão 11 do Laravel traz a *trait* **Dumpable**, extensível a qualquer classe PHP dentro da aplicação.

O trecho de código a seguir exemplifica o uso da nova *trait*:

```php
class Stringable implements JsonSerializable, ArrayAccess
{
    use Conditionable, Dumpable, Macroable, Tappable;
 
    str('foo')->dd();
    str('foo')->dump();
}
```
E o comportamento é o mesmo da função `dd`, mostrando o valor e interrompendo a aplicação em seguida.

---

Sabemos da importância de manter o sistema atualizado, com a framework mais recente (e estável) em uso. Pensando nisso, alguns cuidados devem ser tomados:
* :books:leia a documentação
* :facepunch:avalie viabilidade técnica e necessidade com o time
* :woman::man:analise se haverá impacto para o cliente

---

Obrigado pela leitura e até breve. :sunglasses: