首页 > 解决方案 > Laravel 7 将数据传递给另一个控制器

问题描述

我目前正在考虑一个“问题”,但不知何故被卡住了。

这是我的第一个控制器中的“显示”功能。

public function show($id)
{
    $model1 = Model1::find($id);
    return view('models1.show',compact('model1'));
}

这是我的路线

<a href="{{ route('model2.create') }}" class="uk-button uk-button-text">Create Model2</a>

这是我的第二个控制器中的“创建”功能。

public function create()
{
    return view('model2.create');
}

两种模型之间存在关系。Model1 有一个 Model2 - Model2 属于 Model1。当我在我的 Web 应用程序中显示来自 model1 的数据时,我有一个按钮,我在其中重定向到 model2 的创建视图,并且我想将 model1 中的 id 传递给这个视图。

我做了一些研究,但我有点想多了。有办法通过会话或发布请求传递它,但我不认为这是“最先进的”。

将 id 从 model1 传递到 model2 的创建视图的最佳方法是什么?

标签: laraveleloquentviewcontroller

解决方案


routes/web.php你定义这样的路线:

Route::get('/model2/create/{model1Id}', 'Model2Controller@create')->name('model2.create')

在您使用的刀片模板中:

{{ route('model2.create', ['model1Id' => $model1->id]) }}

你的Model2Controller样子是这样的:

public function create($model1Id) {
    // use $model1Id here
}

您还可以使用Route Model Binding来节省一些代码行:

// routes/web.php
Route::get('/model2/create/{model1}', 'Model2Controller@create')->name('model2.create')

// blade template
{{ route('model2.create', ['model1' => $model1]) }}

// Model2Controller
public function create(Model1 $model1) {
    // use $model1 directly, you don't have to do
    // $model1 = Model1::findOrFail($model1Id) first
}

推荐阅读