Laravel ga kirish — nima uchun framework kerak

~20 daq · PHP · Zamonaviy PHP

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 bilan
  • update(Vazifa $vazifa) — Route Model Binding: URL dagi {vazifa} ID si bo'yicha Laravel modelni o'zi topadi. Topilmasa — avtomatik 404
  • ->with('flash', ...) — 21-darsdagi flash xabar
  • redirect() — 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 }} — avtomatik htmlspecialchars (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 sikl
  • old('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

  1. Laravel Bootcamp — rasmiy bepul qo'llanma (bootcamp.laravel.com)
  2. Eloquent munosabatlari — hasMany, belongsTo, belongsToMany
  3. Autentifikatsiya — Laravel Breeze yoki Fortify
  4. Form Request — validatsiyani alohida classga chiqarish
  5. Policies — avtorizatsiya (43-darsdagi IDOR himoyasi)
  6. API Resources va Sanctum — API uchun
  7. Queues — email kabi og'ir ishlarni orqa fonda bajarish
  8. 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 serve
  • php 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