පෙර පාඩමේදී අපි Form එකෙන් දත්ත ලබාගෙන Database එකේ ගබඩා කළා. නමුත් පරිශීලකයාට තමන් ඇතුළත් කළ දත්ත බලාගන්නවත්, එය සාර්ථකව ඇතුළත් වුණාද කියා දැනගන්නවත් ක්රමයක් තිබුණේ නැහැ. මෙම පාඩමේදී අපි ඒ ගැටලු විසඳමු.
අද ඉලක්ක:
- Database එකේ ඇති සියලුම නම් (greetings) ලබාගෙන Form එකට පහළින් පෙන්වීම.
- නමක් සාර්ථකව ඇතුළත් කළ පසු "Success" පණිවිඩයක් පෙන්වීම.
🏗️ ගොනු ව්යුහය සහ දත්ත ගමන් කරන ආකාරය (MVC Flow)
පරිශීලකයා Form එක පුරවා Submit කළ විට, දත්ත අපගේ Laravel යෙදුම හරහා ගමන් කරන ආකාරය සහ ඒ සඳහා සම්බන්ධ වන ප්රධාන ගොනු මෙන්න:
දත්ත ගමන් කරන ප්රධාන පියවර මෙසේ සරලව තේරුම් ගත හැක:
- පරිශීලකයා (Browser):
greeting.blade.phpහි ඇති Form එක දකී. නමක් ඇතුළත් කර Submit කරයි. - Route (
routes/web.php): Form එකෙන් එන Request එක (උදා:/greetවෙත POST request එකක්) භාරගෙන, එයGreetingControllerහිstore()function එකට යොමු කරයි. - Controller (
GreetingController.php):- Request එක භාරගනී.
Greeting**Model** එක භාවිතා කර, Database එකේ `greetings` වගුවට දත්ත ඇතුළත් කරයි.- සාර්ථක පණිවිඩයක් (success message) සමඟ නැවත මුල් පිටුවටම යොමු කරයි.
- Route (නැවතත්): Redirect වූ Request එක (
/වෙත GET request එකක්) භාරගෙන, එයGreetingControllerහිshow()function එකට යොමු කරයි. - Controller (නැවතත්):
Greeting**Model** එක භාවිතා කර, database එකේ ඇති සියලුම නම් ලබාගනී.- ලබාගත් නම් සහ තිබේ නම් success message එකක් සමඟ
greeting.blade.php**View** එකට යවයි.
- View (
greeting.blade.php): Controller එකෙන් එවන දත්ත (නම් ලැයිස්තුව සහ success message) භාවිතා කර HTML පිටුව සකස් කර Browser එකට යවයි. - පරිශීලකයා (Browser): යාවත්කාලීන වූ පිටුව දකී (සාර්ථක පණිවිඩය සහ අලුත් නම ඇතුළත් වූ නම් ලැයිස්තුව).
දත්ත ගමන් කරන ආකාරය පිළිබඳ රූප සටහනක්:
Laravel MVC Data Flow (පරිශීලකයා දත්ත ඇතුළත් කිරීම)
Browser ➡️ Route ➡️ Controller ➡️ Model (Database) ➡️ Controller ➡️ View ➡️ Browser
පියවර 1: Controller එකෙන් දත්ත ලබාගෙන View එකට යැවීම
පළමුව, GreetingController එකේ show() function එක වෙනස් කර, `Greeting` Model එක හරහා සියලුම දත්ත ලබාගෙන එය view එකට යවමු.
app/Http/Controllers/GreetingController.php ගොනුව විවෘත කර show() function එක පහත පරිදි සකසන්න.
// GreetingController.php
public function show()
{
// 1. Greeting model එක භාවිතා කර database එකේ ඇති සියලුම records ලබාගන්න.
$allGreetings = Greeting::all();
// 2. එම දත්ත 'greetings' යන නමින් view එකට යවන්න.
return view('greeting', ['greetings' => $allGreetings]);
}
මෙහිදී, Greeting::all() මගින් `greetings` වගුවේ ඇති සියලුම දත්ත `$allGreetings` නම් විචල්යයට (variable) ලැබේ. පසුව එය associative array එකක් ලෙස view() function එක හරහා යවනු ලැබේ.
පියවර 2: View එකේ දත්ත පෙන්වීම (Blade Loop)
දැන් Controller එකෙන් එවන $greetings විචල්යය අපේ View එකේදී භාවිතා කළ හැකියි. අපි Blade @foreach loop එකක් භාවිතා කර එම නම් ලැයිස්තුවක් ලෙස පෙන්වමු.
resources/views/greeting.blade.php ගොනුව විවෘත කර, </form> tag එකට පසුව පහත කේත කොටස ඇතුළත් කරන්න.
<!-- ... form එක අවසන් වන තැන ... -->
</form>
<hr>
<!-- Database එකේ ඇති නම් මෙතන පෙන්වයි -->
<h4 class="mt-4">ඇතුළත් කළ නම් ලැයිස්තුව</h4>
@if ($greetings->count() > 0)
<ul class="list-group">
@foreach ($greetings as $greeting)
<li class="list-group-item">{{ $greeting->name }}</li>
@endforeach
</ul>
@else
<p>තවමත් කිසිදු නමක් ඇතුළත් කර නොමැත.</p>
@endif
මෙහි @if ($greetings->count() > 0) මගින් දත්ත තිබේ දැයි පරීක්ෂා කරයි. @foreach මගින් එක් එක් දත්තය `li` tag එකක් තුල පෙන්වයි. {{ $greeting->name }} මගින් XSS حملات වලින් ආරක්ෂා වෙමින් දත්තය display කරයි.
පියවර 3: සාර්ථක පණිවිඩයක් (Success Message) එක් කිරීම
පරිශීලකයෙකු නමක් ඇතුළත් කළ පසු, එය සාර්ථක බව දැන්වීමට අපි "session flash message" එකක් භාවිතා කරමු.
1. Controller එක වෙනස් කිරීම:GreetingController.php හි store() function එකේ `redirect` කරන පේළිය මෙසේ වෙනස් කරන්න.
// GreetingController.php -> store() function
public function store(Request $request)
{
// ... Validation සහ Create කේතය ...
// 'success' නමින් session message එකක් සමඟ redirect කරන්න.
return redirect('/')->with('success', 'ඔබගේ නම සාර්ථකව ඇතුළත් විය!');
}
2. View එක වෙනස් කිරීම:
දැන් එම පණිවිඩය පෙන්වීමට greeting.blade.php ගොනුවේ, <form> tag එකට ඉහළින් පහත කේතය එක් කරන්න.
<!-- greeting.blade.php -->
<div class="card-body">
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<form action="/greet" method="POST">
@csrf
<!-- ... form එකේ ඉතිරිය ... -->
📝 පාඩම අවසානයේ සම්පූර්ණ කේත
මෙම පාඩමේදී අප විසින් සිදුකරන සියලුම වෙනස්කම් වලින් පසුව, ඔබගේ ප්රධාන ගොනු දෙකේ සම්පූර්ණ කේතය පහත පරිදි විය යුතුය. ඔබට ඔබගේ ගොනුවේ ඇති පැරණි කේතය සම්පූර්ණයෙන්ම ඉවත් කර, මෙම කේතය copy-paste කරගත හැක.
1. Controller: app/Http/Controllers/GreetingController.php
මෙම Controller එක දැන් දත්ත ලබාගෙන view එකට යැවීමේ සහ දත්ත ගබඩා කර සාර්ථක පණිවිඩයක් සමඟ redirect කිරීමේ කාර්යයන් දෙකම සිදු කරයි.
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Greeting; // අපේ Model එක import කරගැනීම
class GreetingController extends Controller
{
/**
* Form එක පෙන්වන අතර, database එකේ ඇති සියලු නම් ද view එකට යවයි.
*/
public function show()
{
// Greeting model එක භාවිතා කර database එකේ ඇති සියලුම records ලබාගන්න.
$allGreetings = Greeting::all();
// එම දත්ත 'greetings' යන නමින් view එකට යවන්න.
return view('greeting', ['greetings' => $allGreetings]);
}
/**
* Form එකෙන් එන දත්ත භාරගෙන, database එකේ ගබඩා කරයි.
*/
public function store(Request $request)
{
// 1. එන දත්ත වලංගුදැයි බැලීම (Validation)
$request->validate([
'name' => 'required|string|max:255', // 'name' අනිවාර්යයි, අකුරු විය යුතුයි
]);
// 2. දත්ත database එකේ ගබඩා කිරීම
Greeting::create([
'name' => $request->name, // request එකේ එන 'name' එක ගබඩා කරන්න
]);
// 3. 'success' නමින් session message එකක් සමඟ නැවත මුල් පිටුවටම යොමු කිරීම
return redirect('/')->with('success', 'ඔබගේ නම සාර්ථකව ඇතුළත් විය!');
}
}
2. View: resources/views/greeting.blade.php
මෙම View එක දැන් සාර්ථක පණිවිඩ සහ Controller එකෙන් එවන නම් ලැයිස්තුව පෙන්වීමට සූදානම්ය.
<!DOCTYPE html>
<html lang="si">
<head>
<meta charset="UTF-8">
<title>Greeting App</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css" rel="stylesheet">
</head>
<body>
<div class="container mt-5">
<div class="row justify-content-center">
<div class="col-md-7">
<div class="card">
<div class="card-header">
<h4>සුබ පැතුම් යෙදුම (Greeting App)</h4>
</div>
<div class="card-body">
{{-- සාර්ථක පණිවිඩය පෙන්වීම --}}
@if (session('success'))
<div class="alert alert-success">
{{ session('success') }}
</div>
@endif
<form action="/greet" method="POST">
@csrf
<div class="mb-3">
<label for="name" class="form-label">ඔබේ නම ඇතුළත් කරන්න</label>
<input type="text" class="form-control" id="name" name="name" required>
</div>
<button type="submit" class="btn btn-primary">Submit</button>
</form>
<hr>
{{-- Database එකේ ඇති නම් ලැයිස්තුව පෙන්වීම --}}
<h4 class="mt-4">ඇතුළත් කළ නම් ලැයිස්තුව</h4>
@if ($greetings->count() > 0)
<ul class="list-group">
@foreach ($greetings as $greeting)
<li class="list-group-item">{{ $greeting->name }}</li>
@endforeach
</ul>
@else
<p>තවමත් කිසිදු නමක් ඇතුළත් කර නොමැත.</p>
@endif
</div>
</div>
</div>
</div>
</div>
</body>
</html>
🚀 නැවත ක්රියාත්මක කර බලමු!
දැන් php artisan serve ක්රියාත්මක කර ඔබගේ යෙදුම refresh කරන්න. ඔබ අලුතින් නමක් ඇතුළත් කළ විට, ඔබට සාර්ථක පණිවිඩයක් පෙනෙනු ඇති අතර, එම නම පහළින් ඇති ලැයිස්තුවටද එක්වනු ඇත.