Laravel ga kirish — nima uchun framework kerak
Muammodan boshlaylik
O'tgan darslarda o'z qo'lingiz bilan yozdingiz: router, front controller, repository, view lar uchun layout, CSRF himoya, flash xabarlar, sessiya sozlamalari, parol xeshlash, API yordamchilari, validatsiya.
Bu — har bir veb-ilovada kerak bo'ladigan narsalar. Har yangi loyihada ularni noldan yozasizmi? Va ularda xato yo'qligiga qanchalik ishonchingiz komil?
Framework — shu umumiy qismlarning tayyor, minglab loyihada sinovdan o'tgan, xavfsiz to'plami. Siz faqat o'z loyihangizga xos qismni yozasiz.
PHP dunyosidagi eng mashhur framework — Laravel.
Nima uchun Laravel?
- PHP frameworklari ichida eng katta jamiyat va eng ko'p ish o'rinlari
- Mukammal hujjatlar (laravel.com/docs)
- "Dasturchi baxti" falsafasi — o'qishli, chiroyli sintaksis
- Hammasi ichida: ORM, migratsiyalar, autentifikatsiya, navbatlar, email, test, API
- Ekotizim: Livewire, Inertia, Filament (admin panel), Forge, Vapor
Alternativalar: Symfony (korporativ loyihalar, Laravel ham uning komponentlaridan foydalanadi), Slim (mikro-framework, kichik API lar uchun), CodeIgniter, Yii.
O'rnatish
composer global require laravel/installer
laravel new todo-app
cd todo-app
php artisan serve
Yoki installersiz:
composer create-project laravel/laravel todo-app
http://localhost:8000 — Laravel ning salomlashish sahifasi.
Tuzilma — tanish narsalar
todo-app/
├── app/
│ ├── Http/Controllers/ ← controllerlar (41-dars)
│ └── Models/ ← Eloquent modellar (Model)
├── config/ ← sozlamalar — return [...] (18-dars)
├── database/migrations/ ← jadval tuzilmalari
├── public/index.php ← front controller (41-dars)
├── resources/views/ ← Blade shablonlar (View)
├── routes/web.php ← yo'llar (41-dars)
├── routes/api.php ← API yo'llari (42-dars)
├── vendor/ ← Composer paketlari (39-dars)
├── .env ← maxfiy sozlamalar (39-dars)
└── composer.json
Deyarli hamma narsa sizga tanish. Laravel — siz o'rgangan g'oyalarning professional amalga oshirilishi.
Todo ilova — Laravel da
1. Baza sozlamasi — .env
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_DATABASE=todo
DB_USERNAME=root
DB_PASSWORD=
2. Migratsiya — jadvalni kod orqali yaratish
php artisan make:model Vazifa -m
Ikki fayl yaratildi: model va migratsiya. database/migrations/xxxx_create_vazifas_table.php:
public function up(): void
{
Schema::create('vazifalar', function (Blueprint $table) {
$table->id();
$table->string('matn');
$table->boolean('bajarildi')->default(false);
$table->timestamps(); // created_at, updated_at
});
}
php artisan migrate
Jadval yaratildi. Migratsiyalar Git da saqlanadi — hamkasbingiz php artisan migrate qilsa, unda ham aynan shunday jadval paydo bo'ladi. SQL ni qo'lda yuborish shart emas.
3. Model — app/Models/Vazifa.php
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Vazifa extends Model
{
protected $table = 'vazifalar';
protected $fillable = ['matn', 'bajarildi'];
protected $casts = ['bajarildi' => 'boolean'];
}
Bor-yo'g'i shu. Eloquent ORM endi barcha SQL ni o'zi yozadi:
Vazifa::all(); // SELECT * FROM vazifalar
Vazifa::find(5); // WHERE id = 5
Vazifa::where('bajarildi', false)->latest()->get();
Vazifa::create(['matn' => 'Non olish']); // INSERT
$v->update(['matn' => 'Yangi matn']); // UPDATE
$v->delete(); // DELETE
Hammasi ichida prepared statements bilan — SQL injection imkonsiz.
4. Yo'llar — routes/web.php
<?php
use App\Http\Controllers\VazifaController;
use Illuminate\Support\Facades\Route;
Route::get('/', [VazifaController::class, 'index']);
Route::post('/vazifalar', [VazifaController::class, 'store']);
Route::patch('/vazifalar/{vazifa}', [VazifaController::class, 'update']);
Route::delete('/vazifalar/{vazifa}', [VazifaController::class, 'destroy']);
41-darsdagi routerimiz bilan deyarli bir xil!
5. Controller
php artisan make:controller VazifaController
<?php
namespace App\Http\Controllers;
use App\Models\Vazifa;
use Illuminate\Http\Request;
class VazifaController extends Controller
{
public function index()
{
return view('vazifalar.index', [
'vazifalar' => Vazifa::orderBy('bajarildi')->latest()->get(),
]);
}
public function store(Request $request)
{
$data = $request->validate([
'matn' => 'required|string|max:255',
]);
Vazifa::create($data);
return redirect('/')->with('flash', "Vazifa qo'shildi");
}
public function update(Vazifa $vazifa)
{
$vazifa->update(['bajarildi' => !$vazifa->bajarildi]);
return back();
}
public function destroy(Vazifa $vazifa)
{
$vazifa->delete();
return back()->with('flash', "O'chirildi");
}
}
E'tibor bering:
$request->validate(...)— 20-darsdagi butun validatsiya bitta qatorda. Xato bo'lsa — avtomatik orqaga qaytaradi, xatolar va eski qiymatlar bilanupdate(Vazifa $vazifa)— Route Model Binding: URL dagi{vazifa}ID si bo'yicha Laravel modelni o'zi topadi. Topilmasa — avtomatik404->with('flash', ...)— 21-darsdagi flash xabarredirect()— 23-darsdagi PRG
6. View — resources/views/vazifalar/index.blade.php
<!DOCTYPE html>
<html lang="uz">
<body>
@if (session('flash'))
<p style="color:green">{{ session('flash') }}</p>
@endif
@error('matn')
<p style="color:red">{{ $message }}</p>
@enderror
<form method="post" action="/vazifalar">
@csrf
<input name="matn" value="{{ old('matn') }}">
<button>Qo'shish</button>
</form>
<ul>
@forelse ($vazifalar as $v)
<li>
<form method="post" action="/vazifalar/{{ $v->id }}" style="display:inline">
@csrf @method('PATCH')
<button>{{ $v->bajarildi ? '↩' : '✓' }}</button>
</form>
{{ $v->matn }}
<form method="post" action="/vazifalar/{{ $v->id }}" style="display:inline">
@csrf @method('DELETE')
<button>✕</button>
</form>
</li>
@empty
<li>Vazifalar yo'q</li>
@endforelse
</ul>
</body>
</html>
Blade shablonlari:
{{ $x }}— avtomatikhtmlspecialchars(XSS himoyasi standart holatda yoqilgan)@csrf— CSRF token maydoni (43-dars)@method('DELETE')— HTML forma faqat GET/POST yuboradi; Laravel yashirin maydon orqali boshqa metodlarni taqlid qiladi@forelse ... @empty— bo'sh ro'yxat holati bilan siklold('matn')— xatodan keyin kiritilgan qiymatni qaytarish
Siz yozgan kod va Laravel
| Biz qo'lda yozganimiz | Laravel da |
|---|---|
Router classi |
Route::get(...) |
VazifaRepository + PDO |
Eloquent Model |
CREATE TABLE qo'lda |
Migratsiyalar |
e() funksiyasi |
{{ }} |
csrfMaydon() / csrfTekshir() |
@csrf + middleware |
$xatolar[] validatsiya |
$request->validate([...]) |
flash() |
->with() / session() |
password_hash + login |
php artisan breeze:install — tayyor auth |
Api::javob() |
return response()->json(...) |
Keyin nima o'rganish kerak
- Laravel Bootcamp — rasmiy bepul qo'llanma (bootcamp.laravel.com)
- Eloquent munosabatlari —
hasMany,belongsTo,belongsToMany - Autentifikatsiya — Laravel Breeze yoki Fortify
- Form Request — validatsiyani alohida classga chiqarish
- Policies — avtorizatsiya (43-darsdagi IDOR himoyasi)
- API Resources va Sanctum — API uchun
- Queues — email kabi og'ir ishlarni orqa fonda bajarish
- Testlar — Pest yoki PHPUnit
Nima uchun shunday?
Nima uchun kurs boshidanoq Laravel o'rgatmadik — vaqtni tejagan bo'lardik-ku?
Chunki framework — bu abstraksiya, va abstraksiya ostida nima borligini bilmasangiz, u buzilganda ojiz qolasiz. {{ }} nima uchun xavfsiz, {!! !!} nima uchun xavfli? @csrf ni unutsangiz nima bo'ladi? Eloquent qachon 1000 ta so'rov yuboradi? "419 Page Expired" xatosi nima degani? Bu savollarga faqat ichini tushungan dasturchi javob bera oladi. Siz endi shunday dasturchisiz.
Xulosa
Eslab qoling:
- Framework — har bir loyihada kerak bo'ladigan narsalarning tayyor, xavfsiz to'plami
- Laravel — PHP dagi eng mashhur framework; MVC, Eloquent, Blade, migratsiyalar
composer create-project laravel/laravel nom→php artisan servephp artisan make:model X -m,make:controller,migrate{{ }}— avtomatik XSS himoya,@csrf— CSRF himoya- Kursda qo'lda yozgan har bir narsangizning Laravel da ekvivalenti bor
Keyingi dars
45-dars: Yakuniy loyiha — blog: ro'yxatdan o'tish, maqolalar, izohlar