Do not speak Portuguese? Translate this site with Google or Bing Translator
O que há de novo no Laravel 8

Posted on: July 06, 2021 11:03 PM

Posted by: Renato

Categories: Laravel PHP webdev dev

Views: 1008

O que há de novo no Laravel 8

Com o lançamento do Laravel 8 em setembro de 2020 , o popular framework PHP continua a oferecer novos recursos e melhorias. Após a versão 5, o Laravel mudou para o versionamento semântico e os lançamentos mais frequentes significaram mudanças menores entre cada um. Dito isso, ainda existem várias atualizações interessantes nesta versão da estrutura.

Embora o Laravel continue oferecendo correções de segurança para a versão 7 até o início de 2021, nenhuma correção de bugs será lançada depois de outubro de 2020, então você deve atualizar para o Laravel 8 o mais rápido possível. 

Despejos de esquema de migração

Se você trabalha em um aplicativo Laravel há muito tempo, pode ter dezenas ou centenas de arquivos de migração de banco de dados em seu projeto. Normalmente, você executará apenas os mais novos a cada vez, mas, quando um novo desenvolvedor se juntar à sua equipe ou você quiser atualizar as tabelas do banco de dados, terá que executar todas essas migrações em sequência novamente.

O novo schema:dumpcomando do Laravel 8 corrige este problema. Depois de executar o comando Artisan, suas migrações existentes serão “comprimidas” e salvas em um único arquivo SQL. Você pode optar por definir o --prunesinalizador, o que também removerá os arquivos de migração originais do seu projeto. Da próxima vez que você executar todas as suas migrações, o Laravel irá apenas executar o arquivo SQL, seguido por quaisquer novas migrações que você adicionou desde o squash.

Para ver o esquema de despejo em ação, crie um novo projeto Laravel 8 e conecte um banco de dados MySQL ou Postgres. O Laravel vem com algumas migrações padrão, então uma vez que você configura seu banco de dados, você pode executar o seguinte:

php artisan schema:dump --prune

Você verá que o Laravel deletou suas migrações no ./database/migrationsdiretório e criou um único arquivo SQL no ./database/schemadiretório. Agora, você pode executar todas as suas migrações novamente, e o Laravel usará o arquivo SQL:

php artisan migrate:fresh

Observe que os dumps do esquema de migração do Laravel 8 só funcionam ao usar um banco de dados baseado em SQL como MySQL ou PostgreSQL. Bancos de dados NoSQL como MongoDB não podem usar esse recurso e também não funciona para SQLite.

Fábricas baseadas em classe

O Laravel removeu as funções de fábrica de modelos em favor de fábricas de modelos baseadas em classes . Isso significa que você pode criar uma instância de um modelo para fins de teste ou propagação usando o novo factory()método. Por exemplo, o código a seguir criará cinco usuários e os salvará em seu banco de dados:

User::factory()->count(5)->create();

O Faker está sempre disponível para classes de fábrica, então é realmente fácil gerar dados de teste de boa aparência. Se você precisa de suporte legado para funções de fábrica, o Laravel lançou um pacote que você pode usar para manter o método antigo até atualizar seu código.

Melhorias de limitação de taxa

Antes do Laravel 8, a melhor maneira de adicionar limitação de taxa ao seu aplicativo era usar o throttlemiddleware. Você poderia personalizar esse middleware estendendo-o ou criando sua própria classe , mas não era fácil de fazer.

Na versão 8, o Laravel adicionou um novo método ao RouteServiceProviderchamado configureRateLimiting()Aqui você pode usar a nova RateLimiterfachada do Laravel para implementar uma lógica personalizada em torno da limitação de taxa. Por exemplo, você pode permitir que os administradores façam solicitações ilimitadas de API, enquanto outros usuários estão limitados a 60 solicitações por minuto:

...
    protected function configureRateLimiting()
    {
        RateLimiter::for('api', function (Request $request) {
            return $request->user()->isAdmin() ? 
                Limit::none() :
                Limit::perMinute(60);
        });
    }
...

A lógica complexa em torno dos limites de taxa pode ser atraente para aplicativos Laravel baseados em API.

Opções de modo de manutenção aprimoradas

Os desenvolvedores normalmente colocam seus aplicativos Laravel em modo de manutenção enquanto executam tarefas como a atualização de pacotes do Composer ou migrações de banco de dados. Nas versões anteriores do Laravel, os desenvolvedores podiam usar seu endereço IP para ignorar o modo de manutenção, mas no Laravel 8, este método foi substituído por tokens baseados em URL.

Por exemplo, coloque seu aplicativo em modo de manutenção usando o seguinte comando:

php artisan down --secret="12345"

Os usuários não conseguirão acessar o aplicativo a menos que naveguem para <YOUR_APP_URL>/12345Se fizerem isso, eles podem ignorar o modo de manutenção e ver o aplicativo. Isso permite que você compartilhe um link com outros desenvolvedores ou partes interessadas que podem precisar ignorar o modo de manutenção.

Outro problema com o modo de manutenção nas versões anteriores do Laravel era que ele dependia do Laravel estar em um estado de funcionamento. Em outras palavras, se o seu composer installcomando quebrasse a instalação do Laravel, a página de manutenção também seria quebrada.

Para contornar isso, o Laravel 8 adicionou uma opção para pré - renderizar uma visão específica que os usuários verão enquanto seu aplicativo está em modo de manutenção. Por exemplo, se você quiser mostrar a página de erro padrão do Laravel 503 durante o modo de manutenção, você pode executar o seguinte:

php artisan down --render="errors::503"

Esse recurso garante que o modo de manutenção seja mais robusto. Embora você não queira gastar muito tempo no modo de manutenção, você quer que ele funcione.

Testes de viagem no tempo

Testar código baseado em tempo é sempre complicado. Os aplicativos que dependem de diferenças de tempo em relação a now()terão dificuldade em testar sua lógica. Felizmente, o Laravel 8 inclui um novo recurso de manipulação de tempo que permite alterar o tempo percebido do aplicativo durante o teste.

Por exemplo, você pode ter um método em seu modelo de usuário que retorna truequando a conta de um usuário tem mais de 90 dias:

...
    public function isExperienced()
    {
        return $this->created_at < Carbon::now()->subDays(90);
    }
...

Para testar isso, você pode escrever um teste que use o travel()método:

...
    public function testUserIsExperienced()
    {
        $user = User::inRandomOrder()->first();

        $this->travel(91)->days();
        $this->assertTrue($user->isExperienced());

        $this->travelBack();
        $this->assertFalse($user->isExperienced());
    }
...

Esse recurso melhora drasticamente sua capacidade de testar código baseado em tempo e detectar casos extremos.

Outras melhorias

Além dos novos recursos significativos descritos acima, o Laravel 8 também inclui muitas melhorias relativamente pequenas sobre as quais você pode ler mais nas notas de lançamento da versão 8 . Por exemplo:

  • O Laravel agora coloca os modelos em um novo diretório (chamado Models) por padrão.
  • O Tailwind está sendo usado para mais estilos padrão do Laravel, incluindo paginação.
  • Agora você pode agrupar trabalhos em segundo plano usando o Bus::batch()método.
  • php artisan servecomando agora recarrega seu aplicativo sempre que você atualiza seu .envarquivo.
  • Os encerramentos de escuta de eventos agora podem ser executados em segundo plano usando a queueable()função.

0

Share

Donate to Site


About Author

Renato

Developer

Add a Comment
Comments 0 Comments

No comments yet! Be the first to comment

Blog Search


Categories

OUTROS (16) Variados (109) PHP (133) Laravel (171) Black Hat (3) front-end (29) linux (114) postgresql (39) Docker (28) rest (5) soap (1) webservice (6) October (1) CMS (2) node (7) backend (13) ubuntu (56) devops (25) nodejs (5) npm (3) nvm (1) git (8) firefox (1) react (7) reactnative (5) collections (1) javascript (7) reactjs (8) yarn (0) adb (1) Solid (2) blade (3) models (1) controllers (0) log (1) html (2) hardware (3) aws (14) Transcribe (2) transcription (1) google (4) ibm (1) nuance (1) PHP Swoole (5) mysql (31) macox (4) flutter (1) symfony (1) cor (1) colors (2) homeOffice (2) jobs (3) imagick (2) ec2 (1) sw (1) websocket (2) markdown (1) ckeditor (1) tecnologia (14) faceapp (1) eloquent (14) query (4) sql (40) ddd (3) nginx (9) apache (4) certbot (1) lets-encrypt (3) debian (12) liquid (1) magento (2) ruby (1) LETSENCRYPT (1) Fibonacci (1) wine (1) transaction (1) pendrive (1) boot (1) usb (1) prf (1) policia (2) federal (1) lucena (1) mongodb (4) paypal (1) payment (1) zend (1) vim (4) ciencia (6) js (1) nosql (1) java (1) JasperReports (1) phpjasper (1) covid19 (1) saude (1) athena (1) cinnamon (1) phpunit (2) binaural (1) mysqli (3) database (42) windows (6) vala (1) json (2) oracle (1) mariadb (4) dev (12) webdev (24) s3 (4) storage (1) kitematic (1) gnome (2) web (2) intel (3) piada (1) cron (2) dba (18) lumen (1) ffmpeg (2) android (2) aplicativo (1) fedora (2) shell (4) bash (3) script (3) lider (1) htm (1) csv (1) dropbox (1) db (3) combustivel (2) haru (1) presenter (1) gasolina (1) MeioAmbiente (1) Grunt (1) biologia (1) programming (22) performance (3) brain (1) smartphones (1) telefonia (1) privacidade (1) opensource (3) microg (1) iode (1) ssh (3) zsh (2) terminal (3) dracula (1) spaceship (1) mac (2) idiomas (1) laptop (2) developer (37) api (5) data (1) matematica (1) seguranca (2) 100DaysOfCode (9) hotfix (1) documentation (1) laravelphp (10) RabbitMQ (3) Elasticsearch (1) redis (2) Raspberry (4) Padrao de design (4) JQuery (1) angularjs (4) Dicas (43) Kubernetes (3) vscode (2) backup (1) angular (3) servers (2) pipelines (1) AppSec (1) DevSecOps (4) rust (1) RustLang (1) Mozilla (1) algoritimo (1) sqlite (1) Passport (2) jwt (5) security (2) translate (1) kube (2) iot (1) politica (2) bolsonaro (1) flow (1) podcast (1) Brasil (1) containers (3) traefik (1) networking (1) host (1) POO (2) microservices (2) bug (1) cqrs (1) arquitetura (3) Architecture (4) sail (3) militar (1) artigo (1) economia (1) forcas armadas (1) ffaa (1) autenticacao (2) autorizacao (2) authentication (4) authorization (3) NoCookies (1) wsl (4) memcached (1) macos (2) unix (2) kali-linux (1) linux-tools (5) apple (1) noticias (2) composer (1) rancher (1) k8s (1) escopos (1) orm (1) jenkins (4) github (5) gitlab (3) queue (1) Passwordless (1) sonarqube (1) phpswoole (1) laraveloctane (1) Swoole (1) Swoole (1) octane (1) Structurizr (1) Diagramas (1) c4 (1) c4-models (1) compactar (1) compression (1) messaging (1) restfull (1) eventdrive (1) services (1) http (1) Monolith (1) microservice (1) historia (1) educacao (1) cavalotroia (1) OOD (0) odd (1) chatgpt (1) openai (3) vicuna (1) llama (1) gpt (1) transformers (1) pytorch (1) tensorflow (1) akitando (1) ia (1) nvidia (1) agi (1) guard (1) multiple_authen (2) rpi (1) auth (1) auth (1) livros (2) ElonMusk (2) Oh My Zsh (1) Manjaro (1) BigLinux (2) ArchLinux (1) Migration (1) Error (1) Monitor (1) Filament (1) LaravelFilament (1) replication (1) phpfpm (1) cache (1) vpn (1) l2tp (1) zorin-os (1) optimization (1) scheduling (1) monitoring (2) linkedin (1) community (1) inteligencia-artificial (2) wsl2 (1) maps (1) API_KEY_GOOGLE_MAPS (1) repmgr (1) altadisponibilidade (1) banco (1) modelagemdedados (1) inteligenciadedados (4) governancadedados (1) bancodedados (2) Observability (1) picpay (1) ecommerce (1) Curisidades (1) Samurai (1) KubeCon (1) GitOps (1) Axios (1) Fetch (1) Deepin (1) vue (4) nuxt (1) PKCE (1) Oauth2 (2) webhook (1) TypeScript (1) tailwind (1) gource (2)

New Articles



Get Latest Updates by Email