PHP – Laravel
Η Laravel είναι ένα PHP Framework για την ανάπτυξη web εφαρμογών.
Βασικές Ιδιότητες της Laravel
- MVC Αρχιτεκτονική (Model-View-Controller)
- Model => χειρίζεται τη βάση δεδομένων και τα δεδομένα.
- View => εμφάνιση περιεχομένου
- Controller => λογική που συνδέει το Model με το View
- Eloquent ORM
- Routing System
- Blade Templating Engine
- Migrations & Seeders
- Security & Middleware: Έλεγχος πρόσβασης / Προστασία από CSRF attacks / Έλεγχος πριν φτάσει το αίτημα στο controller.
Εγκατάσταση Laravel
composer create-project laravel/laravel myapp
cd myapp
php artisan serve– php artisan serve: ξεκινάει τον ενσωματωμένο server (http://127.0.0.1:8000)
– .env: αρχείο ρυθμίσεων (database, mail, app key, debug)
Δημιουργία App Key
Βασική Δομή Project
| Φάκελος/Αρχείο | Περιγραφή |
|---|---|
app/Http/Controllers | Περιέχει όλους τους Controllers της εφαρμογής. Οι Controllers διαχειρίζονται τα αιτήματα (requests) και στέλνουν δεδομένα στα views ή models. |
app/Http/Controllers | Περιέχει τα Eloquent Models. Αντιπροσωπεύουν πίνακες της βάσης και ορίζουν σχέσεις μεταξύ τους, fillable πεδία, scopes, και business logic. |
app/Http/Middleware | Περιέχει τα middleware, που φιλτράρουν αιτήματα πριν φτάσουν στους controllers (π.χ. έλεγχος authentication, ρυθμίσεις πρόσβασης). |
routes/web.php | Αρχείο όπου δηλώνονται τα web routes για την εφαρμογή. Συνδέει URLs με controllers ή views και χειρίζεται web requests. |
routes/api.php | Αρχείο όπου δηλώνονται τα API routes. Προορίζεται για RESTful APIs και δεν χρησιμοποιεί session ή cookies. |
resources/views | Περιέχει τα Blade templates (.blade.php). Εδώ γράφεται το HTML που βλέπει ο χρήστης και μπορεί να περιλαμβάνει loops, conditions, και layouts. |
resources/css | Περιέχει αρχεία CSS και stylesheets που χρησιμοποιούνται στο frontend της εφαρμογής. |
resources/js | Περιέχει αρχεία JavaScript και frontend scripts. Συχνά χρησιμοποιείται μαζί με frameworks όπως Vue ή React. |
database/migrations | Περιέχει migration αρχεία που καθορίζουν τη δομή της βάσης δεδομένων. Χρησιμοποιούνται για δημιουργία, αλλαγή ή διαγραφή πινάκων. |
database/seeders | Περιέχει seeders για αρχικοποίηση δεδομένων στη βάση (π.χ. δημιουργία test users, default ρυθμίσεων). |
public/ | Περιέχει όλα τα δημόσια αρχεία, όπως CSS, JS, εικόνες, και το index.php που ξεκινάει η εφαρμογή. |
storage/ | Χρησιμοποιείται για logs, cache, sessions, και αρχεία που φορτώνονται ή δημιουργούνται κατά την εκτέλεση της εφαρμογής. |
bootstrap/ | Περιέχει αρχεία για αρχικοποίηση του framework και το app.php που φορτώνει το Laravel. |
config/ | Περιέχει όλα τα configuration αρχεία του Laravel (π.χ. database.php, mail.php, app.php). |
vendor/ | Περιέχει όλα τα πακέτα και dependencies του Composer. Δεν επεξεργαζόμαστε συνήθως αρχεία εδώ. |
tests/ | Περιέχει unit και feature tests για την εφαρμογή. Χρησιμοποιείται για έλεγχο της λειτουργικότητας. |
artisan | Το CLI εργαλείο του Laravel για commands όπως migrate, make:model, serve, και πολλά άλλα. |
.env | Αρχείο ρυθμίσεων περιβάλλοντος (database, app key, mail, debug, κλπ.). |
Routes (routes/web.php)
Το αρχείο routes/web.php στο Laravel είναι το βασικό αρχείο όπου δηλώνεις όλες τις web routes της εφαρμογής σου. Τα web routes είναι οι διαδρομές (routes) που χρησιμοποιούνται για web σελίδες της εφαρμογής σου. Είναι οι “χάρτες” που λένε στο Laravel τι να κάνει όταν ο χρήστης επισκεφθεί κάποιο URL μέσω browser.
Πώς λειτουργεί:
- Ο χρήστης επισκέπτεται ένα URL, π.χ. http://localhost:8000/users
- Το Laravel ψάχνει μέσα στο web.php για μία route που ταιριάζει με αυτό το URL.
- Όταν βρει την route, εκτελεί τον κώδικα που έχει οριστεί σε αυτή (closure ή controller method)
Route::get('/about', function () {
return view('about');
});Route με Controller: Μια Route με Controller είναι μια διαδρομή (route) που δεν χειρίζεται τον κώδικα απευθείας μέσα στο routes/web.php, αλλά καλεί μια μέθοδο ενός Controller για να εκτελέσει τη λογική της εφαρμογής.
Route::get('/users', [UserController::class, 'index']);Route με Parameter: Μια route με parameter είναι μια διαδρομή που δεν είναι σταθερή, αλλά δέχεται δυναμικές τιμές από το URL.
Πώς λειτουργεί:
- Ο χρήστης επισκέπτεται π.χ. /user/5
- Το Laravel βλέπει ότι η route έχει ένα parameter {id}.
- Η τιμή 5 περνάει στη μέθοδο show() του UserController:
public function show($id) {
$user = User::find($id);
return view('users.show', compact('user'));
}Named Routes: Μια Named Route είναι μια route στην οποία δίνουμε ένα όνομα, ώστε να μπορούμε να αναφερόμαστε σε αυτή με όνομα αντί για URL.
Πλεονεκτήματα:
- Αν αλλάξει το URL, δεν χρειάζεται να ενημερώσουμε όλα τα links στην εφαρμογή.
- Κάνει τον κώδικα πιο καθαρό και ευανάγνωστο
- Δίνει ευκολία σε redirects και Blade templates
Route::get('/profile', [ProfileController::class, 'show'])->name('profile.show');Route Groups: Οι Route Groups είναι ένας τρόπος να ομαδοποιήσεις πολλές routes μαζί και να τους εφαρμόσεις κοινά χαρακτηριστικά όπως middleware, prefix ή namespace. Αυτό βοηθά στο να μην επαναλαμβάνεις τα ίδια σε κάθε route και να έχεις καλύτερη οργάνωση στον κώδικά σου.
Route::middleware(['auth'])->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index']);
});Controllers
Οι Controllers είναι αρχεία/κλάσεις που περιέχουν τη λογική της εφαρμογής.Σκοπός τους είναι να διαχωρίσουν τη λογική από το view.Δηλαδή, δεν γράφουμε όλο τον κώδικα απευθείας στις routes (web.php), αλλά τον βάζουμε σε controllers.
php artisan make:controller UserControllerΠαράδειγμα Controller
<?php
namespace App\Http\Controllers;
use App\Models\User;
use Illuminate\Http\Request;
class UserController extends Controller
{
// Εμφάνιση όλων των χρηστών
public function index() {
$users = User::all();
return view('users.index', compact('users'));
}
// Εμφάνιση συγκεκριμένου χρήστη
public function show($id) {
$user = User::find($id);
return view('users.show', compact('user'));
}
}RESTful Resource Controller: Είναι ένας Controller που ακολουθεί την αρχιτεκτονική REST. Παρέχει προετοιμασμένες μεθόδους για όλες τις CRUD λειτουργίες: Create, Read, Update, Delete.
php artisan make:controller PostController --resource| Μέθοδος Controller | HTTP Method | URL | Περιγραφή |
|---|---|---|---|
| index | GET | /posts | Εμφανίζει τη λίστα όλων των posts |
| create | GET | /posts/create | Εμφανίζει τη φόρμα δημιουργίας νέου post |
| store | POST | /posts | Αποθηκεύει ένα νέο post στη βάση δεδομένων |
| show | GET | /posts/{id} | Εμφανίζει ένα συγκεκριμένο post |
| edit | GET | /posts/{id}/edit | Εμφανίζει τη φόρμα επεξεργασίας ενός post |
| update | PUT / PATCH | /posts/{id} | Ενημερώνει ένα συγκεκριμένο post στη βάση δεδομένων |
| destroy | DELETE | /posts/{id} | Διαγράφει ένα συγκεκριμένο post από τη βάση δεδομένων |
Models & Eloquent ORM
Τα Models είναι κλάσεις που αντιπροσωπεύουν πίνακες της βάσης δεδομένων.Βρίσκονται στο φάκελο: app/Models
Κάθε Model αντιστοιχεί σε έναν πίνακα της βάσης δεδομένων και χειρίζεται δεδομένα, σχέσεις και λογική που σχετίζεται με αυτά τα δεδομένα.
Το Eloquent ORM είναι το αντικειμενοστραφές σύστημα χειρισμού βάσης δεδομένων του Laravel. Σου επιτρέπει να δουλεύεις με πίνακες σαν να ήταν αντικείμενα PHP, χωρίς να γράφεις raw SQL.
Δημιουργία Model + Migration
php artisan make:model Post -m| Μέθοδος | Περιγραφή |
|---|---|
| Model::all() | Επιστρέφει όλους τους records |
| Model::find($id) | Βρίσκει record με συγκεκριμένο ID |
| Model::where(‘field’, value)->get() | Φιλτράρει records |
| Model::create([…]) | Δημιουργεί νέο record (προσοχή $fillable) |
| Model::update([…]) | Ενημερώνει record |
| Model::delete() | Διαγράφει record |
Migrations
Οι Migrations είναι αρχεία που περιγράφουν τη δομή της βάσης δεδομένων.Βρίσκονται στο φάκελο: database/migrations
php artisan make:migration create_users_table --create=users # Δημιουργία Migration
php artisan migrate # Εκτέλεση όλων των pending migrations
php artisan migrate:rollback # Ακυρώνει το τελευταίο migration
php artisan migrate:reset # Ακυρώνει όλα τα migrations–create=users → δημιουργεί αυτόματα έναν πίνακα users.
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(); // primary key
$table->string('name');
$table->string('email')->unique();
$table->string('password');
$table->timestamps(); // created_at, updated_at
});
}
public function down()
{
Schema::dropIfExists('users'); // Αν γίνει rollback
}
}Εκτέλεση Migrations
php artisan migrate
php artisan migrate:fresh --seedBlade Templates
Το Blade είναι το ενσωματωμένο template engine του Laravel.Βρίσκεται στο φάκελο: resources/views
Conditionals: Επιτρέπει να εμφανίζεις διαφορετικό περιεχόμενο ανάλογα με συνθήκες.
@if($user->isAdmin())
Admin
@else
User
@endifLoop: Υποστηρίζει @foreach, @for, @while, @forelse για συλλογές και arrays.
@foreach($posts as $post)
{{ $post->title }}
@endforeachLayouts & Extends: Μπορείς να δημιουργήσεις κοινά layouts και να τα επεκτείνεις στις σελίδες
@extends('app')
@section('content')
Home Page
@endsectionIncludes
@include('partials.navbar')
@include('partials.footer')Forms & Requests
<form method="POST" action="{{ route('posts.store') }}">
@csrf
<input type="text" name="title">
<textarea name="body"></textarea>
<button type="submit">Save</button>
</form>@csrfΠροστατεύει από CSRF attacksactionΗ URL στην οποία θα σταλεί η φόρμαmethod="POST"Τύπος HTTP αιτήματος- Όταν ο χρήστης υποβάλει τη φόρμα, το Laravel δημιουργεί ένα Request αντικείμενο που περιέχει όλα τα δεδομένα της φόρμας.Αυτό το αντικείμενο περνάει στον controller.
Το Laravel προσφέρει εύκολο τρόπο να επαληθεύεις δεδομένα πριν τα αποθηκεύσεις.
public function store(Request $request) {
$validated = $request->validate([
'name' => 'required|string|max:255',
'email' => 'required|email|unique:users,email'
]);
User::create($validated);
return redirect()->route('users.index');
}Middleware
Το Middleware είναι ένα φίλτρο που εκτελείται ανάμεσα στο αίτημα (request) του χρήστη και τον Controller.
- Authentication / Authorization: Ελέγχει αν ο χρήστης είναι συνδεδεμένος ή έχει δικαιώματα πρόσβασης.
- Logging / Monitoring: Καταγράφει τα αιτήματα για ανάλυση ή debugging
- CORS / Headers: Προσθέτει headers στα requests/responses
- Maintenance Mode: Μπορεί να μπλοκάρει πρόσβαση όταν η εφαρμογή είναι σε συντήρηση
Create Middleware
php artisan make:middleware CheckAdminΠεριεχόμενο middleware
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
class CheckAge
{
public function handle(Request $request, Closure $next)
{
if ($request->age < 18) {
return redirect('no-access');
}
return $next($request);
}
}- Το handle() παίρνει το αίτημα και ένα $next closure.
- Αν πληροί κάποια συνθήκη (π.χ. ηλικία < 18), μπορεί να μπλοκάρει το αίτημα.
- Αν όχι, συνεχίζει με $next($request) προς τον controller.
Αυτό σημαίνει ότι μόνο συνδεδεμένοι χρήστες (authenticated) μπορούν να επισκεφτούν τη σελίδα.
Route::get('/profile', [ProfileController::class, 'show'])
->middleware('auth');Artisan Commands
Το Artisan είναι το command line tool του Laravel που σου επιτρέπει να διαχειρίζεσαι εφαρμογή, database, controllers, models και άλλα.
php artisan list | Εμφανίζει όλες τις διαθέσιμες εντολές |
php artisan serve | Εκκινεί local development server (http://127.0.0.1:8000) |
Seeders & Factories
Αυτά τα δύο εργαλεία χρησιμοποιούνται όταν θέλουμε να γεμίσουμε τη βάση δεδομένων με δεδομένα — ειδικά για development, testing ή demo σκοπούς
php artisan make:seeder UsersTableSeeder
php artisan db:seed # Εκτελεί seeders
php artisan make:factory UserFactoryCaching & Config
php artisan config:cache # Cache configuration
php artisan route:cache # Cache routes
php artisan view:clear # Καθαρίζει cached views
php artisan cache:clear # Καθαρίζει cache