【问题标题】:Laravel passing 0 as value through form and getting nullLaravel 通过表单将 0 作为值传递并获取 null
【发布时间】:2021-01-19 03:32:45
【问题描述】:

所以我有一个带有选择输入的简单表单,其中有一个值为“0”的选项:

<form method="post" action="{{ action('Something@something') }}">
    <select name="status">
           <option selected value="0">Bla bla bla</option>
    </select>
    <button type="submit">Press me</button>
</form>

发生错误,当我从选择输入中选择唯一选项时,在控制器中我得到 null 而不是“0”数字(我确实使用 dd() 方法进行了检查)。这个数字是否有可能在集成中间件或其他地方丢失?还是这是一个 PHP 技巧?

【问题讨论】:

  • 你正在做dd($request-&gt;all()),你正在为status获得null
  • @lagbox 是的,我得到的是“”而不是“0”
  • 默认情况下没有任何东西可以将0 更改为null/'',默认情况下唯一存在的是TrimStrings 中间件,它只是修剪字符串
  • @lagbox 还有其他解释为什么我得到“”而不是“0”
  • 我可以像“-1”、“1”和其他任何东西一样通过,但不能通过“0”

标签: php laravel forms http-post


【解决方案1】:

好的,答案是在我的中间件中我有这段代码:

public function handle($request, Closure $next)
{
    if (!Auth::check()) {
        return redirect('/blablabla');
    }

    foreach ($request->input() as $key => $value) {
        if (empty($value)) {
            $request->request->set($key, "");
        }
    }

    return $next($request);
}

问题在于empty($value)。我将empty() 更改为!isset(),一切都已修复

【讨论】:

  • 你为什么要这样做?
  • 似乎您正试图撤消 ConvertEmptyStringsToNull 中间件正在做的事情
  • @lagbox 它将 null 转换为 "" 空字符串。可能是在互联网的某个地方找到的。你在哪里找到ConvertEmptyStringsToNull 中间件?好像没找到
  • 它被添加到Kernel.php中的全局中间件堆栈中,你使用的是什么版本的Laravel?以及为什么要将nulls 显式转换为空字符串?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-02-27
  • 2018-02-21
  • 1970-01-01
  • 2019-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多