🔄 පාඩම් මාලාව 9: Controller එකෙන් View එකට දත්ත යැවීම

පෙර පාඩමේදී අපි Form එකෙන් දත්ත ලබාගෙන Database එකේ ගබඩා කළා. නමුත් පරිශීලකයාට තමන් ඇතුළත් කළ දත්ත බලාගන්නවත්, එය සාර්ථකව ඇතුළත් වුණාද කියා දැනගන්නවත් ක්‍රමයක් තිබුණේ නැහැ. මෙම පාඩමේදී අපි ඒ ගැටලු විසඳමු.

අද ඉලක්ක:

🏗️ ගොනු ව්‍යුහය සහ දත්ත ගමන් කරන ආකාරය (MVC Flow)

පරිශීලකයා Form එක පුරවා Submit කළ විට, දත්ත අපගේ Laravel යෙදුම හරහා ගමන් කරන ආකාරය සහ ඒ සඳහා සම්බන්ධ වන ප්‍රධාන ගොනු මෙන්න:

hello-app/ ├── 📁 app/ │ └── 📁 Models/ │ └── 📜 Greeting.php <-- (Database සමඟ සබඳතා) │ └── 📁 Http/ │ └── 📁 Controllers/ │ └── 📜 GreetingController.php <-- (ඉල්ලීම් පාලනය) ├── 📁 database/ │ └── 📁 migrations/ │ └── 📜 ..._create_greetings_table.php <-- (Database ව්‍යුහය) ├── 📁 resources/ │ └── 📁 views/ │ └── 📜 greeting.blade.php <-- (පරිශීලකයා දකින HTML) └── 📁 routes/ └── 📜 web.php <-- (URL මාර්ග)

දත්ත ගමන් කරන ප්‍රධාන පියවර මෙසේ සරලව තේරුම් ගත හැක:

  1. පරිශීලකයා (Browser): greeting.blade.php හි ඇති Form එක දකී. නමක් ඇතුළත් කර Submit කරයි.
  2. Route (routes/web.php): Form එකෙන් එන Request එක (උදා: /greet වෙත POST request එකක්) භාරගෙන, එය GreetingController හි store() function එකට යොමු කරයි.
  3. Controller (GreetingController.php):
    • Request එක භාරගනී.
    • Greeting **Model** එක භාවිතා කර, Database එකේ `greetings` වගුවට දත්ත ඇතුළත් කරයි.
    • සාර්ථක පණිවිඩයක් (success message) සමඟ නැවත මුල් පිටුවටම යොමු කරයි.
  4. Route (නැවතත්): Redirect වූ Request එක (/ වෙත GET request එකක්) භාරගෙන, එය GreetingController හි show() function එකට යොමු කරයි.
  5. Controller (නැවතත්):
    • Greeting **Model** එක භාවිතා කර, database එකේ ඇති සියලුම නම් ලබාගනී.
    • ලබාගත් නම් සහ තිබේ නම් success message එකක් සමඟ greeting.blade.php **View** එකට යවයි.
  6. View (greeting.blade.php): Controller එකෙන් එවන දත්ත (නම් ලැයිස්තුව සහ success message) භාවිතා කර HTML පිටුව සකස් කර Browser එකට යවයි.
  7. පරිශීලකයා (Browser): යාවත්කාලීන වූ පිටුව දකී (සාර්ථක පණිවිඩය සහ අලුත් නම ඇතුළත් වූ නම් ලැයිස්තුව).
දත්ත ගමන් කරන ආකාරය පිළිබඳ රූප සටහනක්:

Laravel MVC Data Flow (පරිශීලකයා දත්ත ඇතුළත් කිරීම)

Laravel MVC Data Flow Diagram

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 එකේ ඉතිරිය ... -->
🚀 නැවත ක්‍රියාත්මක කර බලමු!

දැන් php artisan serve ක්‍රියාත්මක කර ඔබගේ යෙදුම refresh කරන්න. ඔබ අලුතින් නමක් ඇතුළත් කළ විට, ඔබට සාර්ථක පණිවිඩයක් පෙනෙනු ඇති අතර, එම නම පහළින් ඇති ලැයිස්තුවටද එක්වනු ඇත.