Projeto desenvolvindo com o framework Laravel.
- Arquitetura MVC
- Blade template engine
- Comando Artisan
- Cache
- Eloquent ORM
- Autenticação
- Fila assíncrona
- Paginação automática
- Database migration e seeding
- PHP básico
- PHP OO (classes, heranças, constructor, métodos)
- Composer (gerenciador de pacotes)
- PHP, MySQL, Apache/Nginx
A arquitetura MVC (Model-View-Controller) é um padrão de projeto amplamente utilizado no desenvolvimento de aplicativos web e software. Ele divide a aplicação em três camadas: a camada Model (modelo), responsável por gerenciar os dados e a lógica de negócios, incluindo a comunicação com o banco de dados; a camada View (visão), responsável por exibir os dados e interagir com o usuário, incluindo a comunicação com a interface gráfica do usuário (GUI); e a camada Controller (controlador), responsável por intermediar a comunicação entre o modelo e a visão, manipulando as solicitações do usuário e gerenciando a lógica de controle da aplicação.
Em resumo, o Model representa o estado e o comportamento dos dados da aplicação, a View representa a apresentação visual dos dados para o usuário, e o Controller gerencia a interação entre as duas camadas, além de fornecer a lógica de controle para a aplicação. Essa separação clara de responsabilidades torna a arquitetura MVC flexível, escalável e fácil de manter.
- Linux Ubuntu 22.04.2 LTS
- Apache 2.4.52
- MySQL 8.0.32
- PHP 8.1.2
- Laravel 10
composer create-project laravel/laravel example-app
cd example-app
php artisan server
criando um template controller :
php artisan make:controller UserController
criando um template model :
php artisan make:model User
Na pasta raiz do projeto acessar o diretório routes e abrir o arquivo web.php e adicionar a rota :
- Rota simples
Route::get('/hello-world', function () {
return [
'name' => 'jon snow'
];
});
para acesse a rota no seu browser "http://localhost:8000/hello-world"
- Grupos de rotas
Route::prefix('usuarios')->group(function(){
Route::get("", function(){
return 'Usuários';
})->name('usuarios');
Route::get("/{id}", function($id){
return 'Mostrar detalhes: '. $id;
})->name('usuarios.show');
Route::get("/{id}/tags", function($id){
return 'Tags usuário: '. $id;
})->name('usuarios-tags');
});
- Retornar usuário pelo id passado na rota
Route::get('/user/{user}', function (App\Models\User $user) {
return $user;
});
- Retornar usuário pelo email passado na rota
Route::get('/user/{user:email}', function (App\Models\User $user) {
return $user;
});
- Migrando o banco de dados
php artisan migrate --seed
- Executando a migration
php artisan migrate
- Voltar a migration
php artisan migrate:rollback
- Criando uma nova tabela
php artisan make:migration create_posts_table
- Adicionar uma nova coluna a tabela
php artisan make:migration add_cover_to_posts_table
- Definindo uma variável no UserController
public function show() {
return view('user', [
'var' => 'definindo a variavel',
]);
}
- Usando a variável no blade template na view user
{{ $var }}
- Usando funções nativas do php no blade template
{{ date('d/m/y') }}
- Declarando variáveis no blade template
@php
$total = 80;
$array = [];
$boolean = true;
@endphp
- Usando confições no blade template
@unless ($boolean)
Falso
@endunless
@if ($boolean)
True
@endif
@empty($array)
O array está vazio jovem !
@endempty
@if($total > 100)
Muito caro
@elseif ($total > 80)
tá ok
@elseif ($total > 50)
tá barato
@endif
- Definindo uma coleção no UserControllers
public function index() {
$users = User::all();
return view('users', [
'users' => $users,
]);
}
- Usando loop no blade template
@foreach ($users as $user )
{{ $user->name }} <br />
@endforeach
- criando uma model
php artisan make:model Post
- criando uma model com migration
php artisan make:model Files --migration
- criando uma model com migration, controller e factory
php artisan make:model Business --migration --controller --factory
- criando uma factory
php artisan make:factory TesteFactory
- criando elemento
$businesses = Business::create([
'name' => 'Jon',
'email' => 'Snow',
'address' => 'snow@jon.com'
]);
- pegando toda a coleção de dados
$businesses = Business::all();
- pegando apenas um elemento da coleção
$business = Business::find(1);
- usando o where para pegar um elemento da coleção
$businessWhere = Business::where('name', 'Ernser-Murphy')->get();
$businessWhereFirst = Business::where('name', 'Ernser-Murphy')->first();
- Atualizando o elementos de uma coleção
$businesses = Business::find(3)->update([
'name' => 'Jon',
'email' => 'adasd@asda',
]);
$businesses = Business::find(3);
$businesses->name = 'Tiago';
$businesses->email = 'tiago@laravel9.com';
$businesses->address = 'Quadra C rua B';
$businesses->save();
$input = [
'name' => 'Jon 2',
'email' => 'asda@1adsd2.com'
];
$businesses = Business::find(3);
$businesses->fill($input);
$businesses->save();
- remover um item da coleção
$businesses = Business::find(4);
$businesses->delete();
- Na migration posts adicionar a chave estrangeira de user_id
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')
->constrained()
->onDelete('CASCADE')
->onUpdate('CASCADE');
});
- De 1 para N na model Users
public function posts() {
return $this->hasMany(Post::class);
}
- De N para 1 na model Posts
public function user() {
return $this->belongsTo(User::class);
}
- De N para N na model User
public function teams() {
return $this->belongsToMany(Team::class);
}
- De N para N na model Team
public function users() { return $this->belongsToMany(User::class); }
- linka um usuario a um team
$user->teams()->attach([1,2]);
$user->teams()->sync([2,3]);
$user->teams()->sync([1,3]);
$user->teams()->sync([1,3]);
$user->teams()->syncWithoutDetaching([2]);
$user->teams()->detach([2]);
$user->teams()->detach([1,3]);
- Caregar a relação no controllers
$post->load('user');
- Caregar a relação pela model
protected $with = ['user'];
public function store(Request $request) {
// validation
$input = $request->validate([
'name' => 'required|string',
'email' => 'required|email',
'address' => 'string',
]);
dd($input);
}
- Adicionar o input file
<input type="file" name="logo" value="{{ old('logo') }}" /><br />
- Salvando o arquivo
$file = $input['logo'];
$path = $file->store('logos', 'public');
$input["logo"] = $path;
- Adicionar paginação
public function index() {
$businesses = Business::paginate(5);
return view('businesses', compact('businesses'));
}
- adicionar no front
{{ $businesses->links() }}