Laravel创建相关的模型视图,传递预填充值

时间:2018-08-21 06:51:07

标签: laravel view relation

我正在实现具有许多模型和关系的后台系统。

现在我陷入了我的UI战略: 假设我有房屋和房间。一所房子有很多房间。

我已经以“ Laravel”方式为这两个模型创建了控制器。(资源控制器)

所以我俩都有路线

example.com/backoffice/house

example.com/backoffice/room

我想要实现的功能听起来很简单:

我要在房屋的“详细信息”视图(“为此房屋创建房间”)中放置一个按钮,该按钮将我重定向到“房间/创建”,但是在创建视图中,我想将“ house_id”的值设置为id我来自的房子。因此,我通常可以在RoomController中使用store方法,然后重定向回房子。

我想要一个通用的方法,因为我必须在许多模型/视图上使用此功能。我正在考虑一个会话变量,但我认为最终有人可以更好地处理此类情况吗?还是UI处理的更好主意?

2 个答案:

答案 0 :(得分:1)

显然,Laravel删除了一些很棒的5.6版文档,名为nested resource controllers

您可以做的是使用嵌套路由。

假设您当前的控制器是通过以下方式设置的:

Route::resource('houses', 'HouseController');
Route::resource('rooms', 'RoomController');

如果将此部分更改为以下内容:

Route::resource('houses', 'HouseController');
Route::resource('houses.rooms', 'RoomController');

这将每个房间耦合到一所房子,并且非常易于管理。它为您提供了类似于houses/4/rooms/create的URL,它可以在您的create方法中立即为您提供house_id

public function create($houseId)
{
    return view('houses.rooms.create', ['houseId' => $houseId]);
}

如果要编辑房间,则完全相同:

public function edit($houseId, $roomId)

Laravel 5.1 documentation仍然有此技术的示例。

答案 1 :(得分:1)

为此,我建议采用以下方式(也可能有其他方式)

更改路线:

Route::get('room/create/{house_id?},'Controller@action')->name('room.create')

<a>文件中添加house_view.blade.php标记。

<a href="{{route('room.create', ['house_id' => $houseModel->id])}}">Create Room for this House</a>

房间控制器文件。

public function formCreate($house_id)
 {
   return view('form.room_create', ['house_id' => $house_id]);
 }

<input>文件中添加隐藏的room_create.blade.php标签类型

<input type="hidden" id="house_id" name="house_id" value="{{$house_id or ''}}">