Estructura del projecte
Els directoris i fitxers principals d'un projecte Laravel i el seu propòsit.
Visió general#
Quan crees un projecte Laravel nou, trobaràs una estructura de directoris ben organitzada. Cada directori té un propòsit clar, i entendre aquesta estructura és fonamental per treballar còmodament amb el framework:
laravel-app/
├── app/ # Codi de l'aplicació
│ ├── Console/ # Comandes Artisan
│ ├── Exceptions/ # Gestors d'excepcions
│ ├── Http/ # Controllers, Middleware, Requests
│ ├── Models/ # Models Eloquent
│ └── Providers/ # Service Providers
├── bootstrap/ # Arrencada del framework
├── config/ # Fitxers de configuració
├── database/ # Migracions, seeders, factories
├── public/ # Punt d'entrada (index.php), assets
├── resources/ # Vistes Blade, CSS, JS sense compilar
├── routes/ # Definició de rutes
├── storage/ # Cache, logs, fitxers generats
├── tests/ # Tests unitaris i funcionals
└── vendor/ # Dependències de Composer
El directori app/#
El directori app/ és el cor de la teva aplicació. Aquí és on viu pràcticament tot el codi que escriuràs. Per defecte conté uns quants subdirectoris, però a mesura que el projecte creixi, Laravel en crearà de nous automàticament quan utilitzis comandes Artisan com php artisan make:controller o php artisan make:mail.
El subdirectori Models/ conté els models Eloquent, que representen les taules de la base de dades:
// app/Models/User.php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
protected $fillable = [
'name',
'email',
'password',
];
}El subdirectori Http/ conté els controladors, middleware i form requests. Els controladors gestionen les peticions HTTP entrants i retornen respostes:
// app/Http/Controllers/UserController.php
namespace App\Http\Controllers;
use App\Models\User;
class UserController extends Controller
{
public function index()
{
$users = User::all();
return view('users.index', compact('users'));
}
}El directori routes/#
Laravel organitza les rutes en fitxers separats segons el seu tipus. El fitxer web.php conté les rutes web que utilitzen sessions, protecció CSRF i cookies. El fitxer api.php conté les rutes per a APIs, que són stateless i porten el prefix /api automàticament. I console.php permet definir comandes Artisan basades en closures.
// routes/web.php
Route::get('/', function () {
return view('welcome');
});
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{user}', [UserController::class, 'show']);// routes/api.php
Route::get('/users', [UserController::class, 'index']);
Route::post('/users', [UserController::class, 'store']);El directori database/#
El directori database/ conté tres subdirectoris importants. migrations/ conté els fitxers que defineixen l'estructura de les taules de la base de dades. seeders/ conté les classes per poblar la base de dades amb dades inicials. I factories/ conté les definicions per generar dades fictícies, molt útils per al testing:
// database/migrations/2024_01_01_000000_create_posts_table.php
public function up(): void
{
Schema::create('posts', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained();
$table->string('title');
$table->text('body');
$table->timestamps();
});
}El directori resources/#
Aquí trobaràs les vistes Blade a resources/views/, els fitxers CSS a resources/css/ i els fitxers JavaScript a resources/js/. Aquests fitxers encara no estan compilats: Vite s'encarregarà de processar-los i generar els assets finals al directori public/.
El directori storage/#
El directori storage/ conté els logs de l'aplicació, els fitxers de cache, les sessions i qualsevol fitxer generat per l'aplicació. Es divideix en tres subdirectoris: app/ per a fitxers generats per l'aplicació, framework/ per a cache i sessions del framework i logs/ per als fitxers de log.
Per fer accessible el directori storage/app/public des del navegador, Laravel proporciona una comanda que crea un enllaç simbòlic:
php artisan storage:linkAixò crea un enllaç des de public/storage cap a storage/app/public, permetent servir fitxers pujats pels usuaris de manera segura.
Fitxers a l'arrel del projecte#
A l'arrel del projecte trobaràs diversos fitxers de configuració. El fitxer composer.json defineix les dependències PHP del projecte. El fitxer .env conté la configuració d'entorn. El fitxer artisan és el punt d'entrada per a la CLI de Laravel. I vite.config.js configura el bundler d'assets per al frontend.