Laravel: Top 25 Perguntas e Respostas para Entrevistas
Em Laravel
Laravel é o principal framework PHP para desenvolvimento de aplicações back-end. Neste artigo, apresento um compilado de perguntas e respostas gerais sobre Laravel para entrevistas de emprego.
1. O que é Laravel?
Laravel é um framework open-source bastante poderoso para PHP que segue a arquitetura MVC (model view controller). É um framework bastante popular, que reduz o custo de desenvolvimento e aumenta a qualidade do código.
2. Quais as principais funcionalidades do Laravel?
Principais funcionalidades do Laravel:
3. O que é Controller?
Controller é a camada "C" da arquitetura MVC (Model view controller). É nela onde escrevemos toda a lógica da aplicação. Por exemplo, salvar um registro no banco de dados quando o formulário é submetido na view, ou iterar os registros no banco de dados para então apresentá-los na view.
Criamos novos controllers pelo comando artisan:
Os arquivos de Controllers são armazenados em app/Http/Conrollers.
4. O que é Composer?
Composer é o gerenciador de pacotes do PHP. Com ele podemos instalar, remover ou atualizar pacotes, incluindo o próprio Laravel e suas dependências.
5. O que é php artisan no Laravel? Cite alguns comandos.
Artisan é um CLI (command line interface), ou seja, uma interface de linha de comando em PHP, que interage com o framework Laravel. Serve para facilitar o desenvolvimento da aplicação, sendo utilizado para gerar arquivos comuns, fazer gerenciamento de cache, alterar o estado da aplicação, etc.
Alguns comandos do artisan:
6. O que é middleware em Laravel?
Em termos gerais, middleware é uma espécie de ponte entre o request (requisição) e a response (resposta). Um middleware pode ter funções como impedir que um usuário não autorizado tenha acesso à uma requisição proibida, ou alterar o corpo de uma resposta, ou alterar a linguagem do site programaticamente, etc.
Um middleware pode ser criado com o seguinte comando artisan:
Middlewares são armazenados em app/Http/Middleware.
Alguns middlewares padrão do Laravel são:
7. O que são migrations e como são utilizadas?
Migrations são um mecanismo para fazer uma espécie de versionamento do banco de dados. Migrations são especificadas através de arquivos onde se definem operações para o banco de dados, como criar uma tabela, remover uma tabela ou atualizar uma tabela, desta forma, a base de dados da aplicação é meio que construída através de código PHP.
Você pode criar uma migration da seguinte forma com o artisan:
Depois é preciso definir a migration através do arquivo que será gerado dentro de database/migrations e rodar o seguinte comando para atualizar o banco de dados com a última migração:
8. O que é blade?
Blade é o sistema de templates que o Laravel disponibiliza por padrão para a criação de views para a aplicação. Arquivos de view do Blade usam a extensão .blade.php e são geralmente armazenados no diretório resources/views.
9. O que é validation em Laravel?
Validation é uma forma de validar informações de entrada antes que essas informações sejam armazenadas no banco de dados.
No Laravel, pode-se validar dados usando o método $request->validate(), ou criando um validador manualmente, com Validator::make.
Validações devem receber algumas regras para definir se cada tipo de dado vai prosseguir ou falhar com algum erro. Alguns exemplos de regras já embutidas no framework são:
Também é possível definir regras através de uma regra customizada:
10. O que você entende por Reverse Routing em Laravel?
Reverse Routing é a possibilidade de gerar URLs com base em declarações de rotas. Ou seja, é basicamente a habilidade de dar nomes às URLs.
Isso torna bem mais fácil o desenvolvimento de qualquer aplicação, pois se você define todas as rotas, cada uma com um nome, e utiliza essas rotas em vários lugares, tanto na view como no controller, você pode alterar essas rotas facilmente apenas alterando o arquivo de rotas.
Para criar a URL baseada nesta rota na view, basta apenas fazer:
11. O que é ORM? O que é Eloquent?
ORM significa Object Relational Mapping, e é basicamente uma forma de abstrair as relações do banco de dados em um formato orientado à objetos. O ORM que o Laravel utiliza é chamado de Eloquent. Cada tabela no banco de dados (Model) deve ter um objeto Eloquent associado.
O ORM permite você fazer relações entre tabelas, inserir registros, atualizar registros, remover registros, fazer uniões, junções, entre outras operações de banco de dados.
12. Como desligar CSRF em uma rota específica?
Para desligar a proteção CSRF (Cross Site Request Forgery), você precisa alterar o middleware VerifyCsrfToken, localizado em app/Http/Middleware/VerifyCsrfToken.php, e incluir a rota desejada na variável protected $except. Ex:
'image-api/*'
13. O que é Facade?
Facades são classes que podem ser chamadas de forma estática e servem para facilitar o uso de métodos mais complexos em classes que precisariam ser instanciadas. Todas as Facades que vêm com o Laravel estão disponíveis no namespace Illuminate/Support/Facades.
Muitas Facades podem ser usadas através de um alias, configurado em config/app.php, em aliases, não sendo necessário chamar o namespace completo.
Alguns exemplos de Facades são: App, Artisan, Auth, Cache, Config, Session, Storage, View.
Exemplo de uso da Storage Facade:
public function postUpload(Request $request) {
Storage::disk('local')->putFile('file.txt', $request->file('file'));
14. Qual a função do dd() no Laravel?
dd() é uma helper function cujo nome significa dump and die. Ela imprime o conteúdo de uma variável de qualquer tipo (dump) e em seguida interrompe a execução (die).
15. Qual a diferença entre softDelete() e delete()?
Para se remover um registro do banco de dados, a maneira convencional é usar delete(), que remove os registros selecionados. Já o softDelete() serve para quando não se deseja que os registros sejam realmente removidos, mas apenas marcados como removidos.
No caso do softDelete(), o registro é marcado como removido através de uma coluna deleted_at, contendo um valor com o timestamp de quando aquele registro foi "removido".
Para se usar soft deletes, o model em questão precisa usar o SoftDeletes trait:
16. Fale sobre Laravel Auth.
O Laravel vem com um processo padrão de autenticação chamado Auth. Esse processo é feito de duas coisas: guards e providers.
O Laravel vem com um session guard, que mantém a autenticação do usuário usando cookies e session.
Providers são usados para definir como os usuários autenticados são retornados do banco de dados. Laravel também vem com provider padrão que utiliza o Eloquent para retornar o usuário, mas você pode criar seu próprio provider ou guard.
As funcionalidades padrão de autenticação podem ser inclusas através de um comando artisan
A configuração de auth pode ser feita no arquivo config/auth.php, mas para definir por exemplo, o tempo da sessão de um usuário autenticado, essa configuração deve ser feita no arquivo .env em SESSION_LIFETIME.
17. Qual a função do composer.lock?
O composer gera automaticamente o arquivo composer.lock após um install. Esse arquivo serve para manter uma referência de todas as dependências e sub-dependências do projeto, bem como as versões de cada pacote.
É importante que se faça o versionamento deste arquivo para que o projeto tenha consistência de dependências entre todos os ambientes, ex: local, dev e produção.
18. Cite alguns métodos de agregação do Query Builder.
$total_orders = Order::count();
19. O que é Singleton no Laravel?
Singleton é um design pattern. É quando uma classe é instanciada apenas uma vez e carrega a sua própria instância. Toda vez que essa classe é chamada, estamos chamando a mesma instância.
Por exemplo, se você tem uma classe que faz requisição para uma API, e essa classe é configurada apenas uma vez e depois chamada diversas vezes usando apenas uma instância, esse é um caso de usarmos o padrão singleton.
No Laravel, temos o conceito de service container, que é basicamente uma forma de injetarmos diferentes classes para serem usadas em diferentes partes do nosso app através de Service Providers.
Quando um Service Provider é carregado, ele pode ser atrelado à classes Singleton, que poderão ser usadas em diferentes partes da aplicação, como dentro de um Controller, por exemplo.
20. O que é um Contract em Laravel?
Contracts são uma série de interfaces que definem as dependências de uma classe, por exemplo, o contract Illuminate/Contracts/Mail/Mailer define todos os métodos necessários para o envio de e-mail.
Um contract pode ser utilizado assim:
class TestJob implements ShouldQueue {
21. O que são jobs em Laravel?
Jobs são tarefas pensadas para serem executadas no background. Um job pode ser criado com o comando artisan:
Jobs ficam armazenados por padrão no diretório app/Jobs.
22. O que é queue em Laravel?
Queue é um mecanismo que permite despachar tarefas (normalmente jobs) de forma assíncrona ou em sequência. Ex: O envio de e-mails ou notificações.
Queues são muito úteis para melhorar a experiência do usuário, uma vez que podem ser despachadas para rodar tarefas pesadas no plano de fundo e com isso retornar respostas mais rápido para o usuário.
No Laravel, esse processo de filas precisa ser armazenado em algum tipo de banco de dados, via connection, configurável em config/queue.php. Os dados dessa fila também são executados e mantidos por um processo que é executado permanentemente no plano de fundo no servidor através de php artisan queue:work.
23. O que é faker e para que serve?
Faker é um módulo usado para criar informações falsas, usadas apenas para preenchimento do banco de dados, para fazer testes.
Essas informações podem ser, por exemplo, criar usuários com nomes, emails e números de documento fictícios para fazer testes no sistema.
24. O que são DB seeds e para que servem?
Seeds são uma forma automatizada de preencher o banco de dados com informações de testes ou informações necessárias para produção.
Migrations são usadas para gerar as tabelas da aplicação, já as seeds são usadas para gerar o conteúdo das tabelas.
25. Como limpar o cache em Laravel?
Existem diferentes tipos de cache no Laravel:
Para limpar o cache da aplicação:
Porém, uma vez que todo o cache é apagado, não é recomendado gerar cache em runtime. Para isso, existem métodos helper que recompilam todo o cache.
Para compilar o cache de configuração e .env:
Para compilar o cache dos templates blade:
Para compilar o cache das rotas:
Para compilar o cache de eventos:
Alternativamente, se quiser apenas apagar o cache e não compilar imediatamente, basta usar :clear ao invés de :cache nos comandos acima.