<h2>Instalação e Configuração Inicial</h2>
<p>A instalação do Laravel é simples graças ao Composer, gerenciador de dependências do PHP. Antes de começar, certifique-se de ter PHP 8.1+ e Composer instalados. Para criar um novo projeto, execute:</p>
<pre><code class="language-bash">composer create-project laravel/laravel meu-projeto
cd meu-projeto
php artisan serve</code></pre>
<p>O comando <code>artisan serve</code> inicia um servidor de desenvolvimento em <code>http://localhost:8000</code>. Para projetos existentes, rode <code>composer install</code> para restaurar dependências. Configure o arquivo <code>.env</code> com suas credenciais de banco de dados — este arquivo é crítico e nunca deve ser commitado no Git. Gere a chave de aplicação com <code>php artisan key:generate</code> se necessário.</p>
<h3>Variáveis de Ambiente</h3>
<p>O arquivo <code>.env</code> armazena configurações sensíveis. Crie uma cópia <code>.env.example</code> como referência. Altere <code>DB_CONNECTION</code>, <code>DB_HOST</code>, <code>DB_DATABASE</code> conforme seu ambiente:</p>
<pre><code class="language-env">APP_NAME="Meu App"
APP_ENV=local
APP_KEY=base64:sua_chave_aqui
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel_db
DB_USERNAME=root
DB_PASSWORD=</code></pre>
<h2>Estrutura de Pastas Explicada</h2>
<p>A organização do Laravel segue padrões MVC (Model-View-Controller). Conheça as principais pastas: a pasta <strong>app/</strong> contém a lógica central (Models, Controllers, Middleware); <strong>resources/</strong> armazena views Blade e assets (CSS, JS); <strong>routes/</strong> define as rotas da aplicação; <strong>database/</strong> gerencia migrações e seeders; <strong>public/</strong> é o ponto de acesso público; <strong>storage/</strong> guarda logs e uploads; <strong>tests/</strong> contém testes automatizados.</p>
<h3>Pasta app/ - Coração da Aplicação</h3>
<p>Aqui vivem os Models (representam tabelas do banco), Controllers (processam requisições), e lógica de negócio. Um exemplo típico:</p>
<pre><code class="language-php">// app/Models/Post.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Post extends Model
{
protected $fillable = ['title', 'content', 'user_id'];
public function user()
{
return $this->belongsTo(User::class);
}
}</code></pre>
<h3>Pasta resources/views - Templates Blade</h3>
<p>As views são templates HTML com a sintaxe Blade do Laravel. Blade permite lógica PHP limpa com <code>@if</code>, <code>@foreach</code>, <code>@include</code>:</p>
<pre><code class="language-blade"><!-- resources/views/posts/index.blade.php -->
@extends('layouts.app')
@section('content')
<div class="container">
<h1>Posts</h1>
@foreach($posts as $post)
<article>
<h2>{{ $post->title }}</h2>
<p>{{ $post->content }}</p>
<small>Por {{ $post->user->name }}</small>
</article>
@endforeach
</div>
@endsection</code></pre>
<h3>Pasta routes/ - Definição de Endpoints</h3>
<p>As rotas conectam URLs a controllers. O arquivo <code>routes/web.php</code> é para rotas web tradicionais:</p>
<pre><code class="language-php">// routes/web.php
use App\Http\Controllers\PostController;
Route::get('/posts', [PostController::class, 'index'])->name('posts.index');
Route::post('/posts', [PostController::class, 'store'])->name('posts.store');
Route::get('/posts/{id}', [PostController::class, 'show'])->name('posts.show');
Route::put('/posts/{id}', [PostController::class, 'update'])->name('posts.update');
Route::delete('/posts/{id}', [PostController::class, 'destroy'])->name('posts.destroy');</code></pre>
<h2>Primeiros Passos Práticos</h2>
<p>Comece criando um Model com Controller e Migration integrados. O comando Artisan torna isso automático:</p>
<pre><code class="language-bash">php artisan make:model Post -m -c</code></pre>
<p>O flag <code>-m</code> cria a migração, <code>-c</code> cria o controller. Edite a migração em <code>database/migrations/</code>:</p>
<pre><code class="language-php">// database/migrations/2024_01_15_create_posts_table.php
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->string('title');
$table->text('content');
$table->foreignId('user_id')->constrained()->onDelete('cascade');
$table->timestamps();
});</code></pre>
<p>Após definir a estrutura, execute <code>php artisan migrate</code> para criar as tabelas. Agora crie um Controller com CRUD completo:</p>
<pre><code class="language-php">// app/Http/Controllers/PostController.php
namespace App\Http\Controllers;
use App\Models\Post;
use Illuminate\Http\Request;
class PostController extends Controller
{
public function index()
{
$posts = Post::with('user')->paginate(10);
return view('posts.index', compact('posts'));
}
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required | string | max:255', 'content' => 'required|string',
]);
Post::create(array_merge($validated, ['user_id' => auth()->id()]));
return redirect()->route('posts.index')->with('success', 'Post criado!');
}
public function show(Post $post)
{
return view('posts.show', compact('post'));
}
public function update(Request $request, Post $post)
{
$post->update($request->validate([
'title' => 'string|max:255',
'content' => 'string',
]));
return redirect()->back()->with('success', 'Atualizado!');
}
public function destroy(Post $post)
{
$post->delete();
return redirect()->route('posts.index')->with('success', 'Deletado!');
}
}</code></pre>
<h2>Considerações Finais e Debugging</h2>
<p>Use <code>php artisan tinker</code> para testar código interativamente no contexto do Laravel. Para debug, adicione <code>dd($variavel)</code> (dump and die) ou use <code>Log::info()</code>. O comando <code>php artisan make:request</code> gera classes de validação reutilizáveis, mantendo controllers limpos. Sempre use eager loading com <code>with()</code> em queries para evitar problemas N+1.</p>
<h2>Conclusão</h2>
<p>Você agora compreende a instalação do Laravel, a organização lógica de suas pastas (app/, resources/, routes/, database/) e criou seu primeiro CRUD funcional. Estes fundamentos — Models, Controllers, Views e Routes — são blocos construtores para qualquer aplicação Laravel. A chave é praticar: crie pequenos projetos, explore Artisan commands e leia a documentação oficial constantemente.</p>
<h2>Referências</h2>
<ul>
<li><a href="https://laravel.com/docs" target="_blank" rel="noopener noreferrer">Laravel Official Documentation</a></li>
<li><a href="https://laravel.com/docs/blade" target="_blank" rel="noopener noreferrer">Laravel Blade Template Documentation</a></li>
<li><a href="https://laravel.com/docs/eloquent" target="_blank" rel="noopener noreferrer">Eloquent ORM Guide</a></li>
<li><a href="https://laravel.com/docs/artisan" target="_blank" rel="noopener noreferrer">Artisan Console Commands</a></li>
<li><a href="https://laravel.com/books" target="_blank" rel="noopener noreferrer">Laravel: The PHP Framework For Web Artisans - Book by Taylor Otwell</a></li>
</ul>