【问题标题】:Laravel 5.5 request()->all() doesn't get all the inputsLaravel 5.5 request()->all() 没有得到所有的输入
【发布时间】:2017-07-07 19:59:24
【问题描述】:

我正在使用 Laravel 5.5。我正在尝试创建一个帖子,但是当我请求 all() 数据从请求实例中转储时,我没有打印出所有字段。

这是我创建帖子的代码:

   /**

    * Persist new post.

    */
public function store()
{
    $this->validate(request(),[

        'title'=>'required' 
    ]);

        dd(request()->all());

        $path = CreatePhotoThumbnail(request()->file('photo'));

        auth()->user()->addPost(new Posts( [
        'title'=>request('title'),
        'body'=>request('body'),
        'photo'=> $path

    ]));
}

我在print_R 中得到的只是标题:

Array ( [_token] => MhOTEGkR1oDMc50q0FiJmI8JCAeuCRrFCfRHcKkq  [title] => test )

已编辑:

形式:

  <!-- Main (left side) -->

  <section style="margin-top:20px;">

    <div class="row">
        <div class="col-sm-12">

          <!-- post -->
          <article class="blog-post">


          <div class="post-entry">

          <h2>Create a Blog Post</h2>

          <p>Be as specific as u can:</p>


          <form name="" action="/posts/create" method="post" class="comment-form" enctype="multipart/form-data">
          {{csrf_field()}}
          <div style="display: none;">
          <input type="hidden" name="_wpcf7" value="79" />
          <input type="hidden" name="_wpcf7_version" value="4.1" />
          <input type="hidden" name="_wpcf7_locale" value="en_US" />
          <input type="hidden" name="_wpcf7_unit_tag" value="wpcf7-f79-p64-o1" />
          <input type="hidden" name="_wpnonce" value="ebcdc94d2e" />
          </div>
          <div class="row">


          <div class="col-md-12">
            <label for="title">Post Title</label>
            <input id="title" type="text" placeholder="Post Title" name="title">
          </div>


          <div class="col-md-12">
            <label for="body">Body:</label>
            <textarea name="body" id="body" placeholder="Post body" rows="10"></textarea>
          </div>

          <div class="col-md-12" id="drop">
              <label for="photo">Upload a post picture</label>
              <input type="file" id="photo"  name="photo" >
          </div>

          <div class="col-md-12"><input type="submit" value="Create Post" class="submit-button" /></div>
          </div>
          </form>


          </div>
          <div class="col-md-12" style="padding: 0px; margin:0px;">
              @include('layouts.errors')
          </div>
          </article>
          <!-- contact end -->

        </div><!-- end col-md-12 -->
    </div><!-- end row -->

   </section>
   <!-- END Main (left side) -->

【问题讨论】:

  • 向我们展示发出此请求的表单或 AJAX 或诸如此类的东西...并查看浏览器的网络检查器以查看网络上发生了什么。
  • 您的输出显示数组的长度 = 9,但只有 7 个元素。似乎缺少的 2 将是 bodyphoto 输入。
  • 因此,查看您的dd 输出,array:9 表示输出中应该有九个元素,而您的title 参数最后缺少"。我怀疑这是您的 dd 的问题 - 您可以试试 print_r 吗?
  • @ceejayoz 很奇怪... print_r 甚至不打印任何东西...
  • L5.5 更改了 validate 方法以返回经过验证的数据。它可能是(非)有意修改$request-&gt;all()。这不太可能是故意的。尝试删除对validate() 的调用,看看您是否看到所有数据,或者将没有规则的缺失字段添加到验证规则中

标签: php laravel


【解决方案1】:

Laravel 5.5 更改了 validate() 方法以返回经过验证的字段,以便您可以轻松地将有效数据传递给模型创建,而无需使用 request-&gt;only()

它可能无意中修改了$request-&gt;all(),因此您没有得到您想要的结果。

如果您想获取所有内容,请尝试将您的字段添加到您的验证器中,即使您不想验证它们,即没有实际规则。

例如

$validData = $this->validate(request(),[
    'title'=>'required',
    'body' => ''
]);

$validData 应该包含您的字段。

你也可以试试

$this->validate(request()->all() ...

这可能不会修改请求对象,这意味着 $request-&gt;all() 可能会按预期工作

【讨论】:

  • 在对该问题进行研究后,我发现 Laravel 5.5 的最新功能之一是 request->all() 返回仅包含在验证实例中的输入。
  • 有趣。你有机会引用你的资料供其他人阅读吗?
猜你喜欢
  • 1970-01-01
  • 2018-04-15
  • 1970-01-01
  • 2019-04-26
  • 1970-01-01
  • 2013-09-06
  • 2016-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多