gpt4 book ai didi

laravel - 如何在 Controller 方法之间传递参数

转载 作者:行者123 更新时间:2023-12-02 20:48:09 25 4
gpt4 key购买 nike

我在获取自定义创建方法的值时遇到问题。我想要的是获取变量 $student_id 并将其放在索引方法中的 findOrFail() 上,如下所示:

ReservationController.php

public function index()
{

$student = Student::with(['sectionSubjects','sectionSubjects.section',
'sectionSubjects.subject'])->findOrFail(1); //$student_id

return $student->sectionSubjects;

}

public function create($id)
{
$student_id = $id;

$subjects = Subject::with('sections')->get();

return view('reservation.form',compact('subjects','student_id'));
}

这是我的路线:

Route::resource('student', 'StudentController');
Route::resource('reservation', 'ReservationController', ['except' => ['create','show'] ]);

Route::get('reservation/{id}/create',
['as' => 'reservation.create', 'uses' => 'ReservationController@create'
]);

我有这个 form.blade.php,当用户单击学生时,它将被重定向到 ReservationController 中的自定义创建方法,如下所示:

<div class="list-group ">
@inject('student', 'App\Http\Controllers\StudentController')
@foreach($student->index() as $s)
<div class="list-group-item">
<h4 class="list-group-item-heading">
{{ $s->first_name }} {{ $s->middle_name }} {{ $s->last_name }}</i>
</h4>
<h5>
ID No.: {{ $s->id_no }}</i>
</h5>

<a href="{{ route('student.edit', $s->id) }}" class="btn btn-xs btn-primary">Edit Info</a>

<a href="{{ route('reservation.create', $s->id ) }}"
class="btn btn-xs btn-danger">
Enroll
</a>

</div>
@endforeach

</div>

现在,在 ReservationController 的索引方法中,我只想获取与 $student_id 相关的值。但是,我无法弄清楚如何实现这一目标。谁能建议解决这个问题的方法吗?

最佳答案

实际上,除了逻辑问题之外,您没有任何问题。

您的 Controller 没有以正确的方式设计。

你需要有这样的东西

//List all subjects
public function index() {
return view('reservation.form')->with('subjects', Subject::with('sections')->get());
}

//List a single subject
//If i didn't misunderstood you, you can remove this one according to the source code you're using.
public function show($id) {
return view('reservation.oneSubject')->with('subject', Subject::find($id));
}

//Enroll a student to subject
public function enroll($id, $student_id) {
//Find the section for $id
//Add student_id to that section
}

您需要定义一个额外的路由,可以是GETPOST,在此示例中我使用GET

Route::get('/reservation/{id}/enroll/{student_id}', 'ReservationsController@enroll');

我应该遵循什么逻辑?

  1. 列出所有主题(将调用 index())
  2. 选择一个主题(将调用 show($id))
  3. 向学生展示。
  4. 点击添加按钮(将调用 enroll($id, $student_id)

如何传递 $id、$student_id 进行注册?

您的预订资源将包含这些路线。

/reservations
/reservations/{id}/store
etc..
示例中的

id 参数指向 Subject 而不是 Student。

假设您有一个 show($id) 函数,它将显示单个主题和学生列表,

return view(...)->with('subject', Subject::find($id)->with('students', YOUR_STUDENTS);

在 View 中,迭代学生,假设您有 $students

@foreach($students as $student)
<a href="{{ action('ReservationController@enroll', [$subject->id, $student->id']) }}">Enroll student</a>
@endforeach

我没有 show() 函数!

由于您没有显示单个主题的显示函数,因此此处将应用相同的逻辑,

  1. 迭代主题
  2. 显示主题
  3. 通过学生进行迭代
  4. 生成 anchor 标记如上面的示例

所以你会得到这样的东西,

@foreach($subjects as $subject)
<h1>{{ $subject->title }}</h1>
@foreach($students as $student)
<div class="students">
<h2> {{ $student->name }}</h2>
<a href="{{ action('ReservationController@enroll', [$subject->id, $student->id]) }}">Enroll</a>
</div>
@endforeach
@endforeach

关于laravel - 如何在 Controller 方法之间传递参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37473562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com