【问题标题】:Modify request field value before saving in Laravel 5在 Laravel 5 中保存之前修改请求字段值
【发布时间】:2015-05-13 17:51:14
【问题描述】:

我正在使用 laravel 5 构建应用程序。 我有这样的代码:

public function store(ArticlesRequest $request, Pages $page)
{

    $parentSlug = Pages::getParentSlug($request->parent_id);
    $slug = ($request->slug)? $request->slug:$request->generic_title; 
    $validSlug = $request->makeSlug($slug);
    $request->slug = $validSlug;

    $page->create($request->all());
}

我想在保存之前更新一些数据,例如 slug,在这种情况下,但如果我不直接从表单字段输入,它不会保存 slug 字段。如何更新包含元素值的 $request?例如 $request->slug = $validSlug;并将我编辑的 slug 保存在数据库中。 非常感谢!

【问题讨论】:

  • 您可能希望将该逻辑移至模型中的attribute mutator
  • @lukasgeiter 很清楚如何在一个字段中设置和获取属性,但是你能告诉我如何使用属性 mutator 合并两个输入字段吗?例如,我有 publish_date 和 publish_time,我将它们一起插入 DB。谢谢! :)
  • 没有一个很好的解决方案。你可以传递一个包含两个值的数组......如果你需要更多帮助,请提出一个新问题:)

标签: php laravel laravel-5


【解决方案1】:

您可以像这样管理请求值:

$request->offsetSet('slug', $validSlug);

但是我同意上面的评论,在你的 Pages 模型中管理一个默认值会好得多。

更新:我以前有两种方法,其中一种从 Laravel 5.1 开始不再有效(感谢@omarjebary)。更新了答案。

【讨论】:

  • 或者直接使用$request->offsetSet('slug', $validSlug)
  • getInputSource() 是 Laravel 5.1+ 中的受保护方法,因此只能由 Request 类本身的实例或从它继承的类调用。 offset() 方法不再存在,取而代之的是 offsetSet(),尽管这是公开的。
  • @omarjebari 感谢您的通知,自 5.0 以来必须更改。第二种方法还能用吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-03-04
  • 1970-01-01
  • 2015-10-08
  • 2017-07-19
  • 2016-05-16
  • 2018-11-27
  • 2020-07-23
相关资源
最近更新 更多