【发布时间】:2019-07-14 21:59:38
【问题描述】:
我在使用Illuminate\Http\Request 类检索表单值时遇到问题。
我有一个创建产品的端点和另一个更新它的端点,像这样设置
Route::post('products', 'ProductController@store');
Route::put('products/{product}', 'ProductController@update');
ProductController 中的 store 和 update 方法是
public function store(Request $request)
{
// validate inputs
$validator = Validator::make($request->all(), [
'name' => 'required',
'category' => 'required',
'status' => 'required',
'price' => 'required',
'image' => 'required|image|mimes:jpeg',
'interest' => 'required'
]);
// return 401 response if validation fails
if ($validator->fails()) {
return response()->json([$validator->errors()], 401);
}
// create & store the product
if ($product = Product::create([
'name' => $request->name,
'category' => $request->category,
'status' => $request->status,
'price' => $request->price,
'interest' => $request->interest,
])) {
// store the product image
$file = $request->file('image');
$destinationPath = "public/images/products";
$filename = 'pramopro_' . $product->name . '_' . $product->id . '.' . $file->extension();
Storage::putFileAs($destinationPath, $file, $filename);
ProductImage::create([
'product_id' => $product->id,
'name' => $filename
]);
}
// return new product
return new ProductResource($product);
}
public function update(Request $request, Product $product)
{
// dd($request);
// validate inputs
$validator = Validator::make($request->all(), [
'name' => 'required',
'category' => 'required',
'status' => 'required',
'price' => 'required',
'image' => 'required|image|mimes:jpeg',
'interest' => 'required'
]);
// return 401 response if validation fails
if ($validator->fails()) {
return response()->json([$validator->errors()], 401);
}
// update this product
if ($product) {
$product->update($request->all());
return new ProductResource($product);
} else {
return response()->json(["error" => "Not found"], 404);
}
}
现在,当我在 postman 中测试端点时,我可以成功创建新的产品记录。但是,如果我尝试更新产品,即使所有必填字段都已填写,我也会收到 401 unauthorized 错误。 dd($request)returns null 但dd($product) 按预期返回产品。
也许我一直在努力寻找它,所以我错过了一些东西。我做错了什么?
【问题讨论】:
-
您是否收到任何关于验证的 401 特定错误?您确定您的
put路由不在auth中间件组中吗? -
存储和更新路由都不受 auth 中间件的保护。它只是返回所有字段名称,说明它们是必需的。 401 实际上是验证错误,但我提供所有字段的方式与创建时相同
-
您确定要使用 Postman 传递一组全新的参数?它们不是未选中的,您是否已将其设置为 PUT?
-
我很确定
-
Php 和 Laravel 不理解 PUT 请求,除非您在请求中指定名称为
_method和值PUT的隐藏输入。
标签: php laravel laravel-5.8