几天前,我开始在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 AppHttpControllers;
use AppCost;
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)
{
$input = $request->all();
dd($input);
}
更新:
The IlluminateHttpRequest
实例提供了多种方法来检查应用程序的 HTTP 请求,并扩展了
SymfonyComponentHttpFoundationRequest
如果控制器方法也需要来自路由参数的输入,则应在其他依赖项之后列出路由参数。例如,如果您的路由定义如下:
Route::put('user/{id}', 'UserController@update');
您仍然可以键入提示 Illuminate\Http\Request 并通过定义控制器方法来访问路由参数 ID,如下所示:
public function update(Request $request, $id)
{
//
}
因此,简单来说,要获取表单参数,您必须将变量($request)传递给控制器,以便可以访问它(假设laravel将这些表单参数存储在$request变量中,因此您可以轻松地将其传递给控制器)。希望它能澄清事情:)