Laravel 将当前用户 ID 传递给控制器

Laravel pass current user id to controller

所以基本上我发送了一个表单,在这个表单中我有 3 个字段。 user_id 我需要另一个字段。所以我决定通过后端而不是将它放在 HTML 中,因为人们可以操纵它。

<form action="{{ route('events.store', Auth::user() ) }}" method="post">

但每当我 dd($request)events.store 时,它会向我显示:

+query: ParameterBag {#59 ▼
    #parameters: array:1 [▼
      1 => null
    ]
  }

这是对的,因为我有 id 1。

为了证明这一点,我使用了 devtools 来操作表单操作并放置了一个我自己命名的自定义值 "testing"。像这样:

<form action="http://192.168.1.14/public/calendar?testing" method="post"">

这将输出

+query: ParameterBag {#59 ▼
    #parameters: array:1 [▼
      "testing" => null
    ]
  }

如何访问该 ID?我怎样才能让它不可操纵?

问题2,如何使用那个字段来存储呢?我是这样做的:

Event::create(
    $request->validate([
        'name' => 'required',
        'description' => 'required',
        'event_date' => 'required'
    ])
);

我希望它可能是这样的:

'user_id' => $request->user_id

也有要求

感谢您的帮助

如果您需要当前登录的用户,那么这比通过表单传递或在 URL 中手动传递要容易得多。

您可以使用:

$request->id()

$request->user()->id

auth()->user()->id

auth()->id()

所有 return 当前用户 ID,只需确保您的路由受到 auth 保护,这意味着您使用 auth 中间件。

-- 添加

我会在事件的用户模型中添加一个关系,我想它是一对多的,所以这个:

public function events()
{
    return $this->hasMany(Event::class);
}

然后在你的控制器中,你可以这样存储它:

auth()->user()->events()->create($request->validate([
        'name' => 'required',
        'description' => 'required',
        'event_date' => 'required'
    ]));