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

时间:2019-09-19 14:03:14

标签: php laravel laravel-6

所以基本上我正在发送一个表单,在此表单中,我有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

也有必要

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

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

您可以使用:

$request->id()

$request->user()->id

auth()->user()->id

auth()->id()

全部返回当前用户ID,只需确保您的路由受auth保护,这意味着您为此使用了auth中间件。

-添加

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

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

然后将其存储在控制器中,如下所示:

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