php - ส่งผ่านพารามิเตอร์ URL เพื่อโพสต์แบบฟอร์มคำขอใน Laravel

เมื่อผู้ใช้คลิกเพื่อสมัครงานตำแหน่งงานว่าง ระบบจะเปลี่ยนเส้นทางไปยังแบบฟอร์มที่มีรูปแบบ URL:


.../jobs/{job}/create`

โดยที่ {job} คือ id


ฉันต้องการส่ง id นี้ไปยังฟังก์ชัน store เพื่อให้ผู้ใช้สามารถกรอกแบบฟอร์ม ส่ง และข้อมูลทั้งหมดจะถูก เก็บไว้ในฐานข้อมูล รวมทั้ง id ที่ส่งผ่าน อย่างไรก็ตาม ดูเหมือนจะไม่ทำงาน และฉันได้รับข้อผิดพลาด array_merge() ต่อไปนี้:



array_merge(): พารามิเตอร์ที่คาดไว้ 2 จะเป็นอาร์เรย์ สตริงที่กำหนด



นี่คือเส้นทางที่ฉันใช้ เส้นทางหนึ่งเปลี่ยนเส้นทางไปยังหน้าแบบฟอร์มและอีกเส้นทางหนึ่งเพื่อจัดเก็บการส่งแบบฟอร์ม:


{-code- 2}

นี่คือฟังก์ชันในตัวควบคุมของฉัน


 public function create($job)
{
return view(\'applications/create\', $job);
}

public function store(Request $request, $job)
{
$application = new \\App\\Models\\Application;

// Set object properties from the user input
$application->job_id = $request->input($job);
$application->user_id = $request->input(\'user_id\');
$application->message = $request->input(\'message\');
// Set default label (new)
$application->label_id = "1";

$application->save();

return redirect(\'applications\');
}


และนี่คือแบบฟอร์มของฉัน


 <div class="wrapper bg-light">
<h1>Apply for job</h1>
<form action="/applications" method="post">
{{ csrf_field() }}

<label for="message">Write a motivation letter</label>
<br>
<textarea name="message" id="message" cols="30" rows="10"></textarea>
<br><br>

<label for="user_id">User id</label>
<input type="number" name="user_id" id="user_id">
<br><br>

<input type="submit" value="Submit">
</form>
</div>

Answer

วิธีแก้ไข:

นี่อาจเป็นข้อผิดพลาด


public function create($job)
{
return view(\'applications/create\', [\'job\' => $job]);

//OR


return view(\'applications/create\', compact(\'job\'));
}

และเพื่อส่งกลับ $job ไปยังวิธีการจัดเก็บ คุณสามารถใช้พารามิเตอร์เส้นทางหรืออินพุตที่ซ่อนอยู่ ใช้พารามิเตอร์เส้นทาง


กำหนดเส้นทางได้


Route::post(\'/applications/{job}\', \'App\\Http\\Controllers\\ApplicationsController@store\')->name(\'applications\');

และคุณสามารถแก้ไขรหัสสำหรับแบบฟอร์ม



สมัครงาน



{{ csrf_field() }}

< label for="message">เขียนจดหมายสร้างแรงจูงใจ


\ n













จากนั้นใน วิธีการจัดเก็บที่คุณสามารถเข้าถึงค่าสำหรับ $job


public function store(Request $request, $job)
{
// คุณยังสามารถรับค่าสำหรับ $job ผ่าน $request->route(\'job\');

$application = new \\App\\Models\\Aplicatio n;

// ตั้งค่าคุณสมบัติของวัตถุจากการป้อนข้อมูลของผู้ใช้
$application->job_id = $request->route(\'job\');
$application->user_id = $request->input( \'user_id\');
$application->message = $request->input(\'message\');
// ตั้งค่าป้ายกำกับเริ่มต้น (ใหม่)
$application->label_id = "1";

$application->save();

// การเปลี่ยนเส้นทางนี้ควรเป็นเส้นทางรับอื่น มิฉะนั้นจะทำให้ข้อผิดพลาดหายไป
// หรือส่งแบบฟอร์มต่อไป
ส่งคืนการเปลี่ยนเส้นทาง (\'แอปพลิเคชัน\ ');
}

อัปเดต


ทางเลือกง่ายๆ คือการป้อนข้อมูลที่ซ่อนอยู่ในแบบฟอร์ม ซึ่งจะส่งคืนค่าของ $job



สมัคร งาน



{{ csrf_field() }}





















เส้นทางสามารถคงอยู่ได้โดยไม่มีพารามิเตอร์เส้นทาง


Route::post(\'/applications\', \'App\\Http\\Controllers\\ApplicationsController@store\')->name(\'applications\');
\ n

และไม่มีอะไรเปลี่ยนแปลงในตัวควบคุมหากคุณใช้ $request->job เพื่อรับค่า


Answer

วิธีแก้ไข:

ฉันเดาว่าปัญหาอยู่ในบรรทัด


return view(\'applications/create\', $job);

< p>เปลี่ยนเป็น


return view(\'applications/create\', [\'job\'=>$job]);

Source