Guia Completo de Laravel: Instalação, Estrutura de Pastas e Primeiros Passos Já leu

Instalação e Configuração Inicial 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: O comando inicia um servidor de desenvolvimento em . Para projetos existentes, rode para restaurar dependências. Configure o arquivo 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 se necessário. Variáveis de Ambiente O arquivo armazena configurações sensíveis. Crie uma cópia como referência. Altere , , conforme seu ambiente: Estrutura de Pastas Explicada A organização do Laravel segue padrões MVC (Model-View-Controller). Conheça as principais pastas: a pasta app/ contém a lógica central (Models, Controllers, Middleware); resources/ armazena views Blade e assets (CSS, JS); routes/ define as rotas da aplicação; database/ gerencia migrações e seeders; public/ é o ponto de acesso público; storage/ guarda logs e uploads; tests/ contém testes

Instalação e Configuração Inicial

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:

composer create-project laravel/laravel meu-projeto
cd meu-projeto
php artisan serve

O comando artisan serve inicia um servidor de desenvolvimento em http://localhost:8000. Para projetos existentes, rode composer install para restaurar dependências. Configure o arquivo .env 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 php artisan key:generate se necessário.

Variáveis de Ambiente

O arquivo .env armazena configurações sensíveis. Crie uma cópia .env.example como referência. Altere DB_CONNECTION, DB_HOST, DB_DATABASE conforme seu ambiente:

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=

Estrutura de Pastas Explicada

A organização do Laravel segue padrões MVC (Model-View-Controller). Conheça as principais pastas: a pasta app/ contém a lógica central (Models, Controllers, Middleware); resources/ armazena views Blade e assets (CSS, JS); routes/ define as rotas da aplicação; database/ gerencia migrações e seeders; public/ é o ponto de acesso público; storage/ guarda logs e uploads; tests/ contém testes automatizados.

Pasta app/ - Coração da Aplicação

Aqui vivem os Models (representam tabelas do banco), Controllers (processam requisições), e lógica de negócio. Um exemplo típico:

// 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);
    }
}

Pasta resources/views - Templates Blade

As views são templates HTML com a sintaxe Blade do Laravel. Blade permite lógica PHP limpa com @if, @foreach, @include:

<!-- 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

Pasta routes/ - Definição de Endpoints

As rotas conectam URLs a controllers. O arquivo routes/web.php é para rotas web tradicionais:

// 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');

Primeiros Passos Práticos

Comece criando um Model com Controller e Migration integrados. O comando Artisan torna isso automático:

php artisan make:model Post -m -c

O flag -m cria a migração, -c cria o controller. Edite a migração em database/migrations/:

// 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();
});

Após definir a estrutura, execute php artisan migrate para criar as tabelas. Agora crie um Controller com CRUD completo:

// 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!');
    }
}

Considerações Finais e Debugging

Use php artisan tinker para testar código interativamente no contexto do Laravel. Para debug, adicione dd($variavel) (dump and die) ou use Log::info(). O comando php artisan make:request gera classes de validação reutilizáveis, mantendo controllers limpos. Sempre use eager loading com with() em queries para evitar problemas N+1.

Conclusão

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.

Referências


Artigos relacionados