【问题标题】:Laravel inject data in input before storeLaravel 在存储之前在输入中注入数据
【发布时间】:2014-08-25 06:13:29
【问题描述】:

在我的控制器的存储功能中:

public function store()
    {
        $validator = Validator::make($data = Input::all(), Item::$rules);

        if ($validator->fails())
        {
            return Redirect::back()->withErrors($validator)->withInput();
        }

        Item::create($data);

        return Redirect::route('spesas.index');
    }

缺少的是 user_id 字段。

由于插入用户是身份验证者,因此我坚持不通过 POST 传递 id,而是使用控制器中的 Auth::user() 检索它(这似乎更安全)。

现在我有问题在 Item::create($data); 之前的输入字段中插入 Auth::user() id;

我在做正确的事吗?有什么建议吗?

谢谢,

【问题讨论】:

  • 好吧,我对 Laravel 了解不多。但是在创建项目之前有什么反对 $data['user_id'] = Auth::id(); 的呢?

标签: php laravel laravel-4


【解决方案1】:

只需将您的用户 ID 添加到 $data 数组中:

$data['user_id'] = Auth::user()->id;

就这么简单。 :-)

或者,您可以有一个名为“user_id”的隐藏输入字段,并将当前授权的用户 ID 添加为字段值。由你决定。

【讨论】:

  • 我会尝试第一个解决方案。隐藏字段会引发很多其他问题,因为恶意用户可以修改它并将项目与其他用户相关联。
  • 是的,尽管您可以执行检查以查看传递的 id 是否对应于 Auth::user()->id 以及它是否没有返回适当的响应。
【解决方案2】:

古老的+ 标志将在这里为您提供帮助:

Item::create($data + ['user_id' => Auth::id()]);

【讨论】:

  • Nope :/ Still give me SQLSTATE[23000]: Integrity constraint violation: 19 Item.user_id may not be NULL (SQL: insert into "items" ("amount", "context_id", "updated_at ", "created_at") 值 (2, 2, 2014-08-18 07:11:41, 2014-08-18 07:11:41))
  • 嗯实际上似乎 Auth::id() 是空的 :_| (而且我确信我已通过身份验证)
【解决方案3】:

试试Auth::user()->id,而不是Auth::id()

或者

$item = new Item($data);
Auth::user()->items()->save($item);

【讨论】:

  • 为什么不使用Auth::id()
【解决方案4】:

所以基本上我找到的更清洁的解决方案是在模型的构造函数中注入正确的 id。所以我会解放控制器的麻烦(并避免重复代码)

【讨论】:

  • 请写下您的代码sn-p,以便人们知道您实际使用了什么。
猜你喜欢
  • 2016-04-23
  • 2022-09-22
  • 2011-08-08
  • 1970-01-01
  • 2014-01-16
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多