Projeto de Estágio Doutbox: tutorial laravel pt. 2
Neste artigo, explico como funciona o estágio aqui na Doutbox e, além disso, compartilho a segunda parte do meu projeto como estagiário. Confira!
Como funciona o estágio na Doutbox?
Tendo essa visão de longo prazo, os estagiários passam por um treinamento antes de entrar diretamente em contato com o código de produção, tendo em vista o pouco conhecimento técnico sobre, e também para evitar que o aprendizado seja sob pressão.
Dessa forma, é aplicado o Programa de Estágio da Doutbox, no qual o estagiário entra na empresa e é recepcionado pelo time, é incluído nos ritos e vai aprendendo um pouco da cultura da empresa.
Em seguida, ele vai executar as atividades, nas quais ele irá aprender bem os fundamentos técnicos que os nossos desenvolvedores usam como base para partir do júnior.
Nesse período que dura em torno de três meses, ele vai fazer essas atividades e apresentá-las para o time, justamente para ter o feedback de outros desenvolvedores, tudo isso construído e guiado com o auxílio dos DEVs.
Quando ele passa a possuir um certo nível de maturidade, o mesmo é incluído em pequenas tarefas de baixa complexidade com o time, com a finalidade de gerar mais entrosamento e, entender como funciona uma experiência dentro de um projeto real.
Conforme ele avança e passa a ter mais maturidade para executar tarefas de média complexidade, até que chega o momento no qual ele se torna apto para ser contratado pela Doutbox.
A seguir você poderá ler a segunda parte do meu projeto de estágio realizado aqui na Doutbox. Confira!
Se você ainda não leu a introdução do meu projeto de estágio, clique aqui para ler a parte 1.
2. FUNDAMENTAÇÃO
2.1 Controller
Tarefa: Pesquisar e escrever sobre controllers.
Em vez de definir toda a lógica de tratamento de solicitação nos arquivos de rota, pode-se organizar esse tratamento dentro do controller, os controladores podem agrupar a lógica de tratamento de solicitações relacionadas a uma classe. Por exemplo, uma classe userController pode manipular as solicitações relacionadas ao usuário, como: mostrar, criar, atualizar e excluir usuários.
2.2 Validation
Tarefa: Pesquisar e escrever sobre Validation (https://laravel.com/docs/5.8/validation).
Validation é o processo de checar a entrada de dados. No Laravel existem vários modos de validar a chegada de dados da aplicação, mas, o mais comum é usar o método validate presente em todas as solicitações HTTP.
2.3 Models
Tarefa: Pesquisar e escrever sobre models.
Laravel inclui o Eloquent que é um Mapeador Objeto-Relacional, que facilita a interação com o banco de dados ao usar o eloquent, cada tabela do banco de dados possui um "model" correspondente que é usado para interagir com essa tabela. Além de recuperar dados registros da tabela no banco de dados, os models do Eloquent também podem inserir, atualizar e excluir registros da tabela.
2.4 Routing
Tarefa: Pesquisar e escrever sobre roteamento, como funcionam as rotas
As rotas mais básicas do Laravel aceitam uma URI e um fechamento, fornecendo um um método muito simples que define rotas e comportamento sem arquivos complicados de roteamento, já vem por padrão os arquivos de rota: api, channels console e web. um exemplo de rota é a rota para o arquivo onde está a tela inicial: Route::get(’/’, function () return view(’welcome’); );
2.5 Repository Pattern
Tarefa: Ler e explicar o que é o respository pattern em Laravel
Repositórios existem para que o acesso e interação com nossos models não seja feito diretamente em outras partes do sistema como controllers. A principal ideia por trás de usar o Repository Pattern em uma aplicação Laravel é bem simples: criar uma camada entre seu Model e sua aplicação para que ao invés de chamarmos diretamente o Model, possamos chamar tal camada. Essa camada funciona como uma ponte entre os models e os controllers. Um benefício-chave do Repository Pattern é que ele nos permite usar o Princípio de Inversão de Dependência (ou código para abstrações, não concreções). Isso torna nosso código mais robusto para mudanças, como se uma decisão fosse tomada posteriormente para mudar para uma fonte de dados que não é suportada pelo Eloquent.
2.5.1 Métodos
Tarefa: Pesquisar e escrever os principais métodos para geração de rotas, get, post, put, patch (descrever aplicabilidade de cada um).
O Router permite registrar rotas correspondem a qualquer verbo HTTP entre eles os principais são get, post, put e patch:
GET: Requisições utilizando o método GET devem retornar apenas dados para onde foi solicitado.
POST: o método POST é utilizado para enviar dados para onde foi especificado.
PUT: o método PUT substitui dados do local especificado.
PATCH: ele aplica modificações parciais em um recurso, diferente do PUT que atualiza que o altera por inteiro.
2.5.2 Resource
Tarefa: Pesquisar e escrever sobre o método de roteamento resource
Ao invés de usar uma rota direta para a view, ou algo que está em resource, ele vai passar pelo controller tornando a rota mais segura, por conta da utilização de um Controller, dentro de resource também é onde se encontram as classes .js que servem inicialmente para utilização do bootstrap, também se encontra a classe lang, que tem mensagens de validação que são usados recorrentemente nos projetos, e podem ser alterados com facilidade.
2.6 Views
2.6.1 Blade
Tarefa: Pesquisar e escrever sobre o blade, o que é, como utilizar, como funciona, principais comandos e diretrizes
O blade é um mecanismo de template do Laravel que facilita a interpretação do PHP, utilizando a extensão .blade.php e o diretório padrão é resources/views/ onde serão criadas as telas da aplicação. Depois de criado o arquivo nesse diretório deve-se ser adicionada a marcação @yeld com uma sessão informando o local onde deverá ser carregado o conteúdo dinâmico da página.
Por padrão, as instruções Blade são enviadas automaticamente por meio da função htmlespecialchars do PHP para evitar ataques XSS.pode-se usar essa sintaxe para fugir de ataques: Hello, !! @name !!; para utilização de if pode-se usar @if, @ifelse, @else e @endif o blade também tem a diretriz @unless e @endunless, também pode ser usado @isset e @empty que verificam o estado de uma variável; pode ser usado @auth @endauth e @guest @endguest para determinar se um usuário está autenticado ou é um convidado;
Pode-se verificar se a aplicação está rodando em um ambiente de produção usando a diretiva @production;
Também pode ser usado o @env para definir se a aplicação está rodando em ambiente específico a exemplo de: @env(’staging’), @env([’staging’, ’production’]) apenas com ’staging ele está em modo de encenação, com ’staging’ e ’production’, ele está em modo de produção também;
Pode-se verificar se uma seção de herança do template tem conteúdo com @hasSection; A estrutura de Switch pode ser usado com as diretivas @switch, @case, @break, @default e @endswitch; Estruturas de repetição podem ser usadas também com @for e @endfor, @foeeach e @endforeach, @forelse e @endforelse e @while e @endwhile;
O @class entra na estrutura de css;
O @include permite a inclusão de uma view do blade em outra view, todas as variáveis incluídas na classe pai estarão incluídas, o @includeIf adiciona uma condição para inclusão, @includeWhen e @includeUnless também adicionam condições específicas para a dependentes de ocasiões específicas da aplicação. O @includeFirst adiciona a primeira view existente dentro de uma array de views;
O @once permite que uma parte do template que será avaliada apenas uma vez no ciclo de renderização atual; em algumas situações para usar um bloco de códigos PHP pode ser usado o comando @php e @endphp.
2.6.2 Laravel Collective
Tarefa: Pesquisar e escrever sobre o laravel collective, o que é, como utilizar, como funciona, principais comandos e diretrizes.
Laravel/collective/html: O Laravel Collective é uma ferramenta extremamente útil para quem vai precisar criar muitos formulários em um aplicação ou até mesmo em uma aplicação pequena ele pode ser útil, além de tornar o código mais legível o pacote dispõe de recursos que tornam o processo de preenchimento de formulários mais produtivo um exemplo clássico é se quiser criar uma lógica onde se centraliza o mesmo formulário, que será usado tanto para cadastrar quanto para aditar, tornando o código mais compacto e dinâmico, além de reduzir tempo de produção. primeiro se instala o pacote com composer; composer require "laravelcollective/html";
Depois para criar um formulário é muito simples, basta aplicar o código:
!! Form::open([’route’ => ’nome.rota’]) !!
...
!! Form::close() !!;
Esse código substitui o formulário tradicional:
...
Os campos do formulário podem ser: text, email, label, password, hidden, file, checkbox, radio, number, date, select, selectRange, Months, submit(botões), um exemplo seria:
!! Form::text(’name-field’, ’Value Default’, [’placeholder’ => ’Preencha este campo’]) !!
// O segundo e terceiro parâmetros são opcionais.
// Resultado final:
<input placeholder="Preencha este campo"name="name-field"type="text"value="Value Default»;
Mas o principal recurso do laravel collective sem dúvida nenhuma é o Form:model, exemplo de código:
!! Form::model(pr oduc t,[′r oute′ => [′pr oduc t.upd ate′,product->id],’class’ => ’form’])!!
!! Form::close() !!;
Resultado:
<form method="POST"action="http://url-app/id"accept-charset="UTF-8"class="form»
<!–Campo que especifica o tipo de envio (verbon http) do formulário: PUT–>
<input name=-method"type="hidden"value="PUT»
<!–Token para proteção contra csrf–> <input name=-token"type="hidden"value="tokenc sr fa qui » < /f orm >;
2.7 Database
2.7.1 Estrutura
Tarefa: Pesquisar e escrever sobre como as informações são salva no banco de dados (tabelas, Primary Key, foreign key, unique, relacionamento entre tabelas)
Primary Key (chave primária): é a chave de identificação(id) de uma linha, não existem Primary Keys duplicadas;
Foreign Key (chave estrangeira): Coluna que deve corresponder a uma coluna ou conjunto de colunas de outra tabela, para buscar determinado dado de outra tabela;
Unique: o unique é uma maneira de determinar um dado que não se repete, diferente de primary key que corresponde ao id de uma linha. O unique pode armazenar outros dados únicos, em um exemplo de usuário com id, nome, cpf, rg e email. o nome pode se repetir, mas os outros dados são únicos para cada usuário, então devem ser declarados como unique.
Tabelas: um conjunto de registros, cada linha representa um registro e cada coluna um campo onde serão inseridos os dados.
Relacionamento entre tabelas: em estruturas relacionais é usado o modo de foreign key para criar uma relação entre tabelas onde uma foreign key irá mapear essa conexão entre tabelas;
2.7.2 Configurações
Tarefa: Pesquisar e escrever sobre o configurações de banco de dados, o que é, como utilizar, como funciona, principais comandos e diretrizes
Primeiro se faz a instalação do banco de dados através do terminal (foi utilizado o MySQL).
Depois de instalado deve-se rodar o comando: /usr/bin/mysql -u root -p para entrar no banco de dados.
Após instalar e entrar no editor basta rodar os comandos SQL, os principais são, (vou utilizar como exemplo uma escola): CREATE DATABASE escola; // cria um banco de dados que será utilizado;
CREATE TABLE estudantes (id PRIMARY KEY, nome VARCHAR(50),curso VARCHAR(100);// cria uma tabela e seus parâmetros para coluna banco de dados;
INSERT into estudantes(id, nome, curso) VALUES (1, ’Matheus’, ciência da computação’); // irá inserir um dado no banco de dados;
UPDATE alunos SET nome = ’Matheus Heerdt’ WHERE id = 1; // irá alterar o dado nome do banco de dados;
SELECT * FROM alunos; // o comando SELECT seleciona dados de acordo com os parâmetros, e o * é um parâmetro para selecionar todos;
DELETE FROM alunos WHERE id = 1; // vai deletar a linha que é representada pelo id 1;
DELETE FROM alunos; // vai deletar todos os dados da tabela, mas manter a estrutura;
ALTER TABLE alunos ADD idade INT; ALTER TABLE alunos ADD idade INT; // vão alterar a tabela de alunos e adicionar: idade e email;
DROP TABLE alunos; // vai excluir a tabela de alunos, tanto dados quanto estrutura;
DROP DATABASE escola; // vai excluir o banco de dados escola e suas tabelas;
GRANT SELECT, INSSERT, UPDATE ON alunos TO Maria; // vai conceder privilégios de pesquisa, inserção e atualização de um banco de dados para o usuário Maria;
REVOKE SELECT ON estudantes FROM Maria; // o comando revoke, revoga privilégios a usuários;
DENY SELECT ON estudantes TO João; // o comando deny vai negar acesso ao banco de dados para o usuário especificado (nesse caso, João);
2.7.3 Migrations
Tarefa: Pesquisar e escrever sobre o migration, o que é, como utilizar, como funciona, principais comandos e diretrizes
O migrations cria um controle de versão do banco de dados dentro da aplicação assim as atualizações no banco de dados serão resolvidas de forma simples e rápidas, sem precisar fazer alterações manuais;
Comandos: php artisan make:migration teste; // vai criar uma migration no diretório databases/migrations, com nome de teste;
Dentro do arquivo criado existem duas funções a up e a down, dentro de up vai ser usado para criar novas tabelas, colunas e índices.:
Public function up() scbhema::create(’stutents’, function(Blueprint t able) t able-> id(); t able-> String (’name’); t able-> String (’email’); t able-> String (’class’); t able-> int (’age’); t able->timestamps(); ;
O comando down deve reverter operações performadas pelo método up;
Public function down() Schema::drop(’students’);
O arquivo de migrations pode ficar cheio de migration conforme a aplicação cresce, o comando:
Php artisan schema:dump
Vai por todos os arquivos de migration em arquivo SQL;
Outro comando seria o: php artisan schema:dump –prune
Quando esse comando é executado o laravel vai escrever um arquivo "schema" no diretório de migrations, assim quando for feita uma migration o Laravel vai executar os comandos SQL do arquivo de schema primeiro, só depois irá executar as migrations que não foram passadas para o arquivo SQL;
O comando: php artisan migrate vai performar as migrações criadas;
Comandos mais específicos podem ser encontrados em: https://laravel.com/docs/8.x/migrationsmigrationstructure mas essa é a estrutura básica;
Fontes:
www.devmedia.com.br/blade-engine-utilizando-templates-no-laravel/36749
https://medium.com/by-vinicius-reis/repository-pattern-n%C3%A3o-precisa-ser-chatoprincipalmente-com-laravel-d97235b31c7e
https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/
https://blog.schoolofnet.com/trabalhando-com-repository-no-laravel/www.twilio.com/blog/repository-pattern-in-laravel-application