PHP / Laravel үндэс
Laravel үндэс
Laravel бол PHP-ийн хамгийн алдартай, хамгийн их хайлагддаг фреймворк юм. Нэвтрэлт, өгөгдлийн сан, routing, template, тест, queue, email — бүгдийг бэлэн хэрэгсэлтэйгээр өгдөг. Энэ хичээлд Laravel-ийн үндсэн ойлголтуудтай танилцаж, анхны жижиг апп бүтээнэ.
Laravel суулгах
bash
# Composer-ээр шинэ Laravel апп үүсгэнэ
composer create-project laravel/laravel миний-апп
cd миний-апп
# Эсвэл Laravel installer ашиглан
composer global require laravel/installer
laravel new миний-апп
# Хөгжүүлэлтийн сервер ажиллуулах
php artisan serve
# Server running on http://127.0.0.1:8000
.env файлд өгөгдлийн сангийн холболт тохируулна:
ini
APP_NAME="Миний Апп"
APP_ENV=local
APP_KEY=base64:... # php artisan key:generate-р үүснэ
APP_DEBUG=true
APP_URL=http://localhost
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=миний_апп
DB_USERNAME=root
DB_PASSWORD=
MVC загвар — Laravel-ийн суурь
Laravel нь MVC (Model-View-Controller) загварыг дагадаг:
код
Хэрэглэгч хүсэлт явуулна
↓
Route ← routes/web.php — URL-ийг controller руу чиглүүлнэ
↓
Controller ← app/Http/Controllers/ — логик
↓
Model ← app/Models/ — өгөгдлийн сан
↓
View ← resources/views/ — Blade template (HTML)
↓
Хэрэглэгч хариу хүлээн авна
php
<?php
// routes/web.php — URL ба controller холбоно
use App\Http\Controllers\НийтлэлController;
Route::get('/', fn() => view('welcome'));
Route::get('/нийтлэлүүд', [НийтлэлController::class, 'жагсаалт']);
Route::get('/нийтлэлүүд/үүсгэх', [НийтлэлController::class, 'үүсгэх_маягт']);
Route::post('/нийтлэлүүд', [НийтлэлController::class, 'хадгалах']);
Route::get('/нийтлэлүүд/{id}', [НийтлэлController::class, 'харуулах']);
Route::delete('/нийтлэлүүд/{id}', [НийтлэлController::class, 'устгах']);
// Resource route — дээрхийг товчоор бичнэ
Route::resource('нийтлэлүүд', НийтлэлController::class);
?>
Controller — хүсэлт боловсруулах
bash
# Controller үүсгэх
php artisan make:controller НийтлэлController --resource
php
<?php
// app/Http/Controllers/НийтлэлController.php
namespace App\Http\Controllers;
use App\Models\Нийтлэл;
use Illuminate\Http\Request;
class НийтлэлController extends Controller
{
// GET /нийтлэлүүд — жагсаалт харуулах
public function index()
{
$нийтлэлүүд = Нийтлэл::latest()->paginate(10);
return view('нийтлэлүүд.жагсаалт', compact('нийтлэлүүд'));
}
// GET /нийтлэлүүд/үүсгэх — маягт харуулах
public function create()
{
return view('нийтлэлүүд.үүсгэх');
}
// POST /нийтлэлүүд — өгөгдөл хадгалах
public function store(Request $хүсэлт)
{
$хүсэлт->validate([
'гарчиг' => 'required|min:3|max:255',
'агуулга' => 'required|min:10',
]);
Нийтлэл::create([
'гарчиг' => $хүсэлт->гарчиг,
'агуулга' => $хүсэлт->агуулга,
'user_id' => auth()->id(),
]);
return redirect('/нийтлэлүүд')
->with('амжилт', 'Нийтлэл амжилттай хадгалагдлаа!');
}
// DELETE /нийтлэлүүд/{id}
public function destroy(Нийтлэл $нийтлэл)
{
$нийтлэл->delete();
return redirect('/нийтлэлүүд')
->with('амжилт', 'Нийтлэл устгагдлаа.');
}
}
?>
Eloquent ORM — өгөгдлийн санд хандах
bash
# Model ба migration хамт үүсгэх
php artisan make:model Нийтлэл -m
php
<?php
// app/Models/Нийтлэл.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
class Нийтлэл extends Model
{
protected $table = 'нийтлэлүүд';
// Массивоор оноохыг зөвшөөрөх талбарууд
protected $fillable = ['гарчиг', 'агуулга', 'user_id'];
// Харилцаа — нийтлэл нь нэг хэрэглэгчид харьяалагдана
public function хэрэглэгч()
{
return $this->belongsTo(User::class, 'user_id');
}
}
?>
php
<?php
// database/migrations/xxxx_create_нийтлэлүүд_table.php
public function up(): void
{
Schema::create('нийтлэлүүд', function (Blueprint $table) {
$table->id();
$table->foreignId('user_id')->constrained()->cascadeOnDelete();
$table->string('гарчиг');
$table->text('агуулга');
$table->timestamps();
});
}
// Migration ажиллуулах
// php artisan migrate
?>
Eloquent ORM-ийн үндсэн үйлдлүүд:
php
<?php
// Бүгдийг авах
$нийтлэлүүд = Нийтлэл::all();
// Шүүх ба эрэмбэлэх
$шинэ = Нийтлэл::where('user_id', 1)
->orderBy('created_at', 'desc')
->take(5)
->get();
// ID-аар нэгийг авах
$нийтлэл = Нийтлэл::find(1);
$нийтлэл = Нийтлэл::findOrFail(1); // Олдохгүй бол 404
// Үүсгэх
$шинэ = Нийтлэл::create(['гарчиг' => 'Тест', 'агуулга' => 'Агуулга...']);
// Шинэчлэх
$нийтлэл->update(['гарчиг' => 'Шинэ гарчиг']);
// Устгах
$нийтлэл->delete();
?>
Blade template — view бичих
blade
{{-- resources/views/нийтлэлүүд/жагсаалт.blade.php --}}
@extends('layouts.app')
@section('content')
<h1>Нийтлэлүүд</h1>
@if (session('амжилт'))
<div class="alert">{{ session('амжилт') }}</div>
@endif
@forelse ($нийтлэлүүд as $нийтлэл)
<article>
<h2>{{ $нийтлэл->гарчиг }}</h2>
<p>{{ Str::limit($нийтлэл->агуулга, 150) }}</p>
<small>{{ $нийтлэл->created_at->diffForHumans() }}</small>
</article>
@empty
<p>Одоогоор нийтлэл байхгүй байна.</p>
@endforelse
{{ $нийтлэлүүд->links() }} {{-- Pagination --}}
@endsection
Дараагийн хичээлд:
Эцсийн төсөл! Энэ курсэд сурсан бүхнээ нэгтгэн жижиг блог апп бүтээнэ. Route, controller, model, Blade view, өгөгдлийн сан, хэлбэрийн баталгаажуулалт, session зэргийг хамтад нь ашиглах болно.