การส่งผ่านข้อมูลระหว่าง 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() | ส่งค่าหลายตัวแปรไปยัง View | return view('welcome', compact('name', 'age')); |
with() | ส่งค่าตัวเดียวไปยัง View | return view('welcome')->with('name', 'John Doe'); |
Array | ส่งค่าหลายตัวแบบอาเรย์ | return view('welcome', ['name' => 'John Doe']); |
Request | รับค่าจากฟอร์ม | $request->input('username'); |
Session | ส่งค่าชั่วคราว เช่น Flash Message | session(['key' => 'value']); |
Route Parameters | ส่งค่าผ่าน URL | /product/{id} |
🚀 Laravel รองรับการส่งข้อมูลระหว่าง Controller และ View ได้หลายวิธี ช่วยให้การพัฒนาเว็บทำได้ง่ายและยืดหยุ่น!