การส่งผ่านข้อมูลระหว่าง View และ Controller ใน Laravel

📌

Laravel มีหลายวิธีในการส่งข้อมูลจาก Controller ไปยัง View และสามารถรับค่าจาก View กลับมายัง Controller ได้


1. ส่งข้อมูลจาก Controller ไปยัง View

สามารถใช้เมธอด view() และส่งค่าผ่าน compact(), with(), หรือ array ได้

🔹 1.1 ใช้ compact()

public function index()
{
    $name = "John Doe";
    return view('welcome', compact('name')); // ส่งตัวแปร name ไปยัง View
}

🔸 การเรียกใช้ใน View (resources/views/welcome.blade.php)

<p>Welcome, {{ $name }}</p>

🔹 1.2 ใช้ with()

public function index()
{
    return view('welcome')->with('name', 'John Doe');
}

🔹 1.3 ใช้ Array

public function index()
{
    return view('welcome', ['name' => 'John Doe']);
}

2. ส่งข้อมูลหลายตัวไปยัง View

สามารถส่งข้อมูลหลายตัวพร้อมกันได้

public function index()
{
    $user = "Alice";
    $age = 25;
    return view('profile', compact('user', 'age'));
}

🔸 การเรียกใช้ใน View

<p>Name: {{ $user }}</p>
<p>Age: {{ $age }}</p>

3. ส่งข้อมูลแบบ Collection

สามารถส่ง Collection หรือ Model ไปยัง View

use App\Models\Product;

public function index()
{
    $products = Product::all();
    return view('products.index', compact('products'));
}

🔸 การเรียกใช้ใน View

@foreach($products as $product)
    <p>{{ $product->name }} - {{ $product->price }}</p>
@endforeach

4. รับข้อมูลจาก View (Form) ไปยัง Controller

ใช้ Request รับค่าที่ส่งจาก Form ไปยัง Controller

🔹 4.1 ใช้ Request รับค่าจาก Form

🔸 Form (resources/views/form.blade.php)

<form action="{{ route('submitForm') }}" method="POST">
    @csrf
    <input type="text" name="username">
    <button type="submit">Submit</button>
</form>

🔸 Controller (app/Http/Controllers/FormController.php)

use Illuminate\Http\Request;

public function submitForm(Request $request)
{
    $username = $request->input('username'); // รับค่าจาก input name="username"
    return "Username: " . $username;
}

5. ใช้ Session ส่งค่าระหว่าง Controller และ View

session(['key' => 'value']); // กำหนดค่าใน Session
$value = session('key'); // ดึงค่าจาก Session
session()->forget('key'); // ลบค่าใน Session

🔹 ส่งค่าไป View ผ่าน Session

return redirect()->route('home')->with('success', 'Data saved successfully!');

🔸 การเรียกใช้ใน View

@if(session('success'))
    <p>{{ session('success') }}</p>
@endif

6. ใช้ Route Parameters ส่งค่าผ่าน URL

🔹 Controller

public function show($id)
{
    return view('product', compact('id'));
}

🔹 Route (routes/web.php)

Route::get('/product/{id}', [ProductController::class, 'show']);

🔹 View

<p>Product ID: {{ $id }}</p>

🎯 สรุป

วิธีใช้ในกรณีไหนตัวอย่าง
compact()ส่งค่าหลายตัวแปรไปยัง Viewreturn view('welcome', compact('name', 'age'));
with()ส่งค่าตัวเดียวไปยัง Viewreturn view('welcome')->with('name', 'John Doe');
Arrayส่งค่าหลายตัวแบบอาเรย์return view('welcome', ['name' => 'John Doe']);
Requestรับค่าจากฟอร์ม$request->input('username');
Sessionส่งค่าชั่วคราว เช่น Flash Messagesession(['key' => 'value']);
Route Parametersส่งค่าผ่าน URL/product/{id}

🚀 Laravel รองรับการส่งข้อมูลระหว่าง Controller และ View ได้หลายวิธี ช่วยให้การพัฒนาเว็บทำได้ง่ายและยืดหยุ่น!

Leave a Reply

Your email address will not be published. Required fields are marked *