【问题标题】:Laravel: Check input field is empty or not submittedLaravel:检查输入字段为空或未提交
【发布时间】:2019-03-28 03:17:48
【问题描述】:

我在不同的网站上有多个表单。它们都以相同的路线结束。 用户可以将某些类型的模型设置为 null。 并非每个表单都提交模型的所有字段。比如:

模型有这个字段:Name, Adress, Phone, Text

Form 1 提交Name, Adress, Phone

Form 2 提交Adress, Text

如果我提交表单 1,我的模型将如下所示:

$model->name = Name;
$model->adress = Adress;
$model->phone = Phone;
$model->text = null;

但我不想覆盖文本。我希望 Text 是提交之前的值。但是如果我提交表单 2,我想更改文本,甚至将其设置为 null。

但是,如何检查表单名称是否在提交的表单中(即使它实际上是null)?

目前,这是我的控制器中的更新例程:

...
$this->artSkill = ($request->artSkill) ? $request->artSkill : null;
$this->craftsmanSkill = ($request->craftsmanSkill) ? $request->craftsmanSkill : null;
$this->ownInitiativeSkill = ($request->ownInitiativeSkill) ? $request->ownInitiativeSkill : null;
...

【问题讨论】:

  • 看来你需要利用 Laravel 的 request validation
  • 但是怎么做呢?我不能将输入字段视为必需的,因为如果表单不想更改字段,它实际上可以为空甚至未提交。我的愿望是从ajax调用路由只更新一个字段。
  • 您可以添加一个隐藏的输入字段,显示此表单1或2是否已提交,然后您可以决定
  • @mooga 但这并不是真正的 OOP,我希望它可用于所有可能的用例。

标签: php laravel input


【解决方案1】:

可以使用模型的update()方法,只传入不为空的值:

https://laravel.com/docs/5.7/eloquent#updates

例如

$input = $request->all();
$input = array_filter($input);
$model->update($input);

【讨论】:

    【解决方案2】:

    您可以选择以下逻辑:

    $model->text = $request->filled('text') ? $request->get('text', $model->text) : null;
    

    如果请求中不存在text,则其值为空。

    如果text 存在且其值为空,则保留原始值。

    【讨论】:

    • 我今天会测试一下。如果它有效,那正是我想要的。
    • 根据 Laravel 文档,如果输入为 null,则填充将返回 false。但是 has 方法将“即使输入值为空字符串或 null 也将返回 true”
    • 最好是专注于三元运算符示例并使其适合您当前的需求。
    猜你喜欢
    • 2017-02-08
    • 2021-05-18
    • 2013-10-28
    • 2011-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-17
    相关资源
    最近更新 更多