【问题标题】:Laravel null POST data in controllerLaravel 控制器中的空 POST 数据
【发布时间】:2017-11-02 14:34:16
【问题描述】:

前几天开始在 laracasts 上学习 laravel,遇到了一个小问题。

当我使用 post 方法提交表单数据并希望在我的控制器中访问此数据时,我有一个空值。

表格:

<form method="POST" action="{{ url('/costs')}}">

{{ csrf_field() }}

  <div class="form-group">
    <label for="cost-title">Cost title</label>
    <input type="text" class="form-control" id="cost-title" name="title" placeholder="Enter cost title">
  </div>

  <div class="form-group">
    <label for="cost-price">Price</label>
    <input type="text" class="form-control" id="cost-price" name="price" placeholder="Enter price">
  </div>

  <button type="submit" class="btn btn-primary">Submit</button>
</form>

控制器:

<?php

namespace App\Http\Controllers;

use App\Cost;

class CostsController extends Controller
{
    public function index(){

        $costs = Cost::all();

        return view('costs.index', compact('costs'));

    }

    public function show(Cost $cost){

        return view('costs.show', compact('cost'));

    }

    public function create(Cost $cost){

        return view('costs.create');

    }

    public function store(){
        dd(request()->all);
    }
}

在我的路线中,我使用 post 方法触发 @store:

Route::get('/costs', 'CostsController@index');
Route::get('/cost/{cost}', 'CostsController@show');
Route::get('/costs/create', 'CostsController@create');

Route::post('/costs', 'CostsController@store');

当我尝试转储和终止请求时:

public function store(){
        dd(request()->all);
    }

我有一个空值。你能解释一下为什么我在这里看不到任何数据吗?

【问题讨论】:

  • 试试这个public function store(Request $request){ dd($request-&gt;all()); }
  • @Maraboc,我试过了,但出现这样的错误:“Class App\Http\Controllers\Request 不存在”
  • 在你的控制器上添加这个use Illuminate\Http\Request; ;)
  • 错误消失了,但我仍然有一个空值。

标签: laravel controller null


【解决方案1】:

更新你的 store 方法并像这样传递一个 Request 参数:

 public function store (Request $request)
{
 $input = $request->all();
 dd($input);
}

更新:

The Illuminate\Http\Request

instance 提供了多种方法来检查您的应用程序的 HTTP 请求,并扩展了

Symfony\Component\HttpFoundation\Request

如果您的控制器方法也需要路由参数的输入,您应该在其他依赖项之后列出您的路由参数。例如,如果您的路线是这样定义的:

Route::put('user/{id}', 'UserController@update');

您仍然可以键入提示 Illuminate\Http\Request 并通过如下定义控制器方法来访问您的路由参数 id:

public function update(Request $request, $id)
{
    //
}

所以,简单来说,要获取表单参数,您必须将变量 ($request) 传递给控制器​​,以便可以访问它(假设 laravel 将这些表单参数存储在 $request 变量中,这样您就可以是否轻松将其传递给控制器​​)​​。 希望它能解决问题:)

【讨论】:

  • 非常感谢!现在可以了!但我不明白有什么区别?您能否解释一下为什么将请求参数存储在单独的变量中而不是转储它可以工作,但我以前的方法却不行?
  • 答案已更新:)
  • 错误:函数名必须是字符串
猜你喜欢
  • 2013-09-16
  • 2018-04-19
  • 2021-04-19
  • 2013-04-13
  • 1970-01-01
  • 2015-11-05
  • 1970-01-01
  • 1970-01-01
  • 2013-09-17
相关资源
最近更新 更多