PHP

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

8 min de leitura

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

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

<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=&quot;Meu App&quot;

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 = [&#039;title&#039;, &#039;content&#039;, &#039;user_id&#039;];

public function user()

{

return $this-&gt;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">&lt;!-- resources/views/posts/index.blade.php --&gt;

@extends(&#039;layouts.app&#039;)

@section(&#039;content&#039;)

&lt;div class=&quot;container&quot;&gt;

&lt;h1&gt;Posts&lt;/h1&gt;

@foreach($posts as $post)

&lt;article&gt;

&lt;h2&gt;{{ $post-&gt;title }}&lt;/h2&gt;

&lt;p&gt;{{ $post-&gt;content }}&lt;/p&gt;

&lt;small&gt;Por {{ $post-&gt;user-&gt;name }}&lt;/small&gt;

&lt;/article&gt;

@endforeach

&lt;/div&gt;

@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(&#039;/posts&#039;, [PostController::class, &#039;index&#039;])-&gt;name(&#039;posts.index&#039;);

Route::post(&#039;/posts&#039;, [PostController::class, &#039;store&#039;])-&gt;name(&#039;posts.store&#039;);

Route::get(&#039;/posts/{id}&#039;, [PostController::class, &#039;show&#039;])-&gt;name(&#039;posts.show&#039;);

Route::put(&#039;/posts/{id}&#039;, [PostController::class, &#039;update&#039;])-&gt;name(&#039;posts.update&#039;);

Route::delete(&#039;/posts/{id}&#039;, [PostController::class, &#039;destroy&#039;])-&gt;name(&#039;posts.destroy&#039;);</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(&#039;posts&#039;, function (Blueprint $table) {

$table-&gt;id();

$table-&gt;string(&#039;title&#039;);

$table-&gt;text(&#039;content&#039;);

$table-&gt;foreignId(&#039;user_id&#039;)-&gt;constrained()-&gt;onDelete(&#039;cascade&#039;);

$table-&gt;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(&#039;user&#039;)-&gt;paginate(10);

return view(&#039;posts.index&#039;, compact(&#039;posts&#039;));

}

public function store(Request $request)

{

$validated = $request-&gt;validate([

&#039;title&#039; =&gt; &#039;required | string | max:255&#039;, &#039;content&#039; =&gt; &#039;required|string&#039;,

]);

Post::create(array_merge($validated, [&#039;user_id&#039; =&gt; auth()-&gt;id()]));

return redirect()-&gt;route(&#039;posts.index&#039;)-&gt;with(&#039;success&#039;, &#039;Post criado!&#039;);

}

public function show(Post $post)

{

return view(&#039;posts.show&#039;, compact(&#039;post&#039;));

}

public function update(Request $request, Post $post)

{

$post-&gt;update($request-&gt;validate([

&#039;title&#039; =&gt; &#039;string|max:255&#039;,

&#039;content&#039; =&gt; &#039;string&#039;,

]));

return redirect()-&gt;back()-&gt;with(&#039;success&#039;, &#039;Atualizado!&#039;);

}

public function destroy(Post $post)

{

$post-&gt;delete();

return redirect()-&gt;route(&#039;posts.index&#039;)-&gt;with(&#039;success&#039;, &#039;Deletado!&#039;);

}

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

Comentários

Mais em PHP

Composer: Gerenciamento de Dependências em PHP na Prática
Composer: Gerenciamento de Dependências em PHP na Prática

O que é Composer e por que você precisa dele Composer é o gerenciador de depe...

Camada Controller: Recebendo Requisições e Orquestrando Respostas na Prática
Camada Controller: Recebendo Requisições e Orquestrando Respostas na Prática

O Papel do Controller na Arquitetura MVC O controller é o intermediário funda...

Como Usar Conexão com MySQL usando PDO em PHP em Produção
Como Usar Conexão com MySQL usando PDO em PHP em Produção

Introdução ao PDO: Por que usar? PDO (PHP Data Objects) é uma abstração de ba...