Laravel is een uitgebreid PHP framework dat een solide basis biedt voor het ontwikkelen van moderne webapplicaties. Hier volgt een overzicht van de belangrijkste componenten en structuur van een typische Laravel applicatie.
1. Directorystructuur
Wanneer je een nieuwe Laravel-applicatie aanmaakt, krijg je een goed georganiseerde directorystructuur:
arduinoCode kopiëren<code>myapp/
├── app/
│ ├── Console/
│ ├── Exceptions/
│ ├── Http/
│ │ ├── Controllers/
│ │ ├── Middleware/
│ │ └── Requests/
│ ├── Models/
│ └── Providers/
├── bootstrap/
├── config/
├── database/
│ ├── factories/
│ ├── migrations/
│ └── seeders/
├── public/
├── resources/
│ ├── js/
│ ├── lang/
│ ├── sass/
│ └── views/
├── routes/
├── storage/
├── tests/
├── vendor/
├── .env
└── composer.json
</code>
Belangrijke directories:
- app/: Hier bevindt zich de kern van je applicatie. Het bevat de business logic, controllers, middleware, en modellen.
- bootstrap/: Bevat bestanden die de applicatie opstarten.
- config/: Bevat alle configuratiebestanden.
- database/: Bevat database migraties, model factories en seeders.
- public/: Bevat de index.php en andere publieke bestanden zoals CSS, JavaScript en afbeeldingen.
- resources/: Bevat views (Blade templates), onbewerkte assets (JavaScript, SASS) en taalbestanden.
- routes/: Bevat alle routebestanden van de applicatie.
- storage/: Bevat gecachte bestanden, logs en andere door de applicatie gegenereerde gegevens.
- tests/: Bevat je tests.
- vendor/: Bevat de door Composer geïnstalleerde afhankelijkheden.
2. Routing
Routes in Laravel worden gedefinieerd in bestanden binnen de routes/
directory, zoals web.php
en api.php
. Een eenvoudige route ziet er als volgt uit:
phpCode kopiëren<code>// routes/web.php
Route::get('/', function () {
return view('welcome');
});
</code>
3. Controllers
Controllers groeperen gerelateerde routefunctionaliteit in één klasse. Ze bevinden zich in app/Http/Controllers/
. Een eenvoudige controller zou er als volgt uit kunnen zien:
phpCode kopiëren<code>// app/Http/Controllers/HomeController.php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
public function index()
{
return view('home');
}
}
</code>
En de bijbehorende route:
phpCode kopiëren<code>// routes/web.php
Route::get('/home', [HomeController::class, 'index']);
</code>
4. Models
Eloquent models vertegenwoordigen database-tabellen en bieden een actieve records-implementatie. Een eenvoudig model ziet er als volgt uit:
phpCode kopiëren<code>// app/Models/User.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
protected $fillable = ['name', 'email', 'password'];
}
</code>
5. Views
Views zijn verantwoordelijk voor de presentatie van de applicatie en bevinden zich in resources/views/
. Laravel gebruikt Blade als de templating engine. Een eenvoudige Blade template:
bladeCode kopiëren<code><!-- resources/views/welcome.blade.php -->
<!DOCTYPE html>
<html>
<head>
<title>Laravel</title>
</head>
<body>
<h1>Welcome to Laravel</h1>
</body>
</html>
</code>
6. Middleware
Middleware biedt een handige mechanisme voor het filteren van HTTP-verzoeken die naar je applicatie komen. Ze bevinden zich in app/Http/Middleware/
. Een voorbeeld van middleware:
phpCode kopiëren<code>// app/Http/Middleware/CheckAge.php
namespace App\Http\Middleware;
use Closure;
class CheckAge
{
public function handle($request, Closure $next)
{
if ($request->age <= 200) {
return redirect('home');
}
return $next($request);
}
}
</code>
En de registratie in app/Http/Kernel.php
:
phpCode kopiëren<code>protected $routeMiddleware = [
'checkage' => \App\Http\Middleware\CheckAge::class,
];
</code>
7. Database Migrations
Migrations bieden een manier om de database schema te definiëren en te beheren. Ze bevinden zich in database/migrations/
. Een eenvoudige migratie:
phpCode kopiëren<code>// database/migrations/2024_05_20_000000_create_users_table.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateUsersTable extends Migration
{
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->id();
$table->string('name');
$table->string('email')->unique();
$table->timestamps();
});
}
public function down()
{
Schema::dropIfExists('users');
}
}
</code>
8. Eloquent ORM
Eloquent ORM maakt het werken met de database eenvoudig en intuïtief. Hier is een voorbeeld van hoe je met een Eloquent model kunt werken:
phpCode kopiëren<code>// Opslaan van een nieuwe gebruiker
$user = new User;
$user->name = 'John Doe';
$user->email = 'john@example.com';
$user->save();
// Ophalen van alle gebruikers
$users = User::all();
// Zoeken naar een specifieke gebruiker
$user = User::find(1);
</code>
9. Task Scheduling
Laravel maakt het plannen van terugkerende taken eenvoudig met behulp van de ingebouwde task scheduler. Deze wordt gedefinieerd in de app/Console/Kernel.php
:
phpCode kopiëren<code>// app/Console/Kernel.php
protected function schedule(Schedule $schedule)
{
$schedule->command('inspire')->hourly();
}
</code>
10. Testing
Laravel biedt uitgebreide ondersteuning voor het testen van je applicaties. Testen worden geplaatst in de tests/
directory en kunnen eenvoudig worden uitgevoerd met PHPUnit:
phpCode kopiëren<code>// tests/Feature/ExampleTest.php
namespace Tests\Feature;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function testBasicTest()
{
$response = $this->get('/');
$response->assertStatus(200);
}
}</code>