Laravel 验证问题
Laravel validation issue
我在验证程序规则时遇到问题
return [
'features' => 'required|array',
'features.*' => 'required|string',
'link' => 'required|url',
'image' => 'nullable|file|image|mimes:jpeg,png,gif,webp|max:2048',
];
Return 我是一个错误,即使存在字段也是必需的。
我不明白是什么导致了这个问题。我使用相同的验证来存储并且它完美地工作。
这是我的控制器代码
public function update(UpdateSite $request, Site $site)
{
$validatedData = $request->validated();
if ($validatedData['image']) {
Storage::delete($site->path);
$imagePath = $validatedData['image']->store('thumbnails');
$interventedImage = Image::make(Storage::url($imagePath));
$interventedImage->resize(500, null, function ($constraint) {
$constraint->aspectRatio();
});
$interventedImage->save('storage/'.$imagePath);
$site->update([
'path' => $imagePath,
]);
}
$site->update([
'site_link' => $validatedData['link'],
]);
$site->features()->delete();
if ($validatedData['features']) {
foreach ($validatedData['features'] as $feature) {
$site->features()->save(new SiteFeature(["feature" => $feature]));
}
}
return $this->response->item($site, new SiteTransformer);
}
更新#1
我的路线
$api->put('sites/{id}', 'SiteController@update')->where(['id' => '\d+']);
我看到 api 方法是 PUT
,但您正在使用 form-data
的 Postman 来请求。尝试使用 x-www-form-urlencoded
请求你 api.
这是关于我的测试。对不起我的英语。
问题出在 PHP 无法与 PUT
、PATCH
请求中的 multipart/form-data
一起使用。很好奇这个问题现在还存在,因为在2014年左右的互联网话题中就有了。
解决方案
文档中有解决方法https://laravel.com/docs/5.6/routing#form-method-spoofing
因此,要更新记录,我只需要使用方法 post
而不是 put
/patch
并发送输入字段 _method = PUT
.
我自己试了一下 put
路由被调用了。
如果 features 是一个数组,那么第二行是正确的,但是如果你将 features 作为字符串传递,那么第二行应该被删除,这条规则说验证你有两个参数称为 features 其中一个是字符串并且是必需的其他也是数组并且需要
'features' => 'required|array',
'features.*' => 'required|string',
我在验证程序规则时遇到问题
return [
'features' => 'required|array',
'features.*' => 'required|string',
'link' => 'required|url',
'image' => 'nullable|file|image|mimes:jpeg,png,gif,webp|max:2048',
];
Return 我是一个错误,即使存在字段也是必需的。
这是我的控制器代码
public function update(UpdateSite $request, Site $site)
{
$validatedData = $request->validated();
if ($validatedData['image']) {
Storage::delete($site->path);
$imagePath = $validatedData['image']->store('thumbnails');
$interventedImage = Image::make(Storage::url($imagePath));
$interventedImage->resize(500, null, function ($constraint) {
$constraint->aspectRatio();
});
$interventedImage->save('storage/'.$imagePath);
$site->update([
'path' => $imagePath,
]);
}
$site->update([
'site_link' => $validatedData['link'],
]);
$site->features()->delete();
if ($validatedData['features']) {
foreach ($validatedData['features'] as $feature) {
$site->features()->save(new SiteFeature(["feature" => $feature]));
}
}
return $this->response->item($site, new SiteTransformer);
}
更新#1
我的路线
$api->put('sites/{id}', 'SiteController@update')->where(['id' => '\d+']);
我看到 api 方法是 PUT
,但您正在使用 form-data
的 Postman 来请求。尝试使用 x-www-form-urlencoded
请求你 api.
这是关于我的测试。对不起我的英语。
问题出在 PHP 无法与 PUT
、PATCH
请求中的 multipart/form-data
一起使用。很好奇这个问题现在还存在,因为在2014年左右的互联网话题中就有了。
解决方案
文档中有解决方法https://laravel.com/docs/5.6/routing#form-method-spoofing
因此,要更新记录,我只需要使用方法 post
而不是 put
/patch
并发送输入字段 _method = PUT
.
我自己试了一下 put
路由被调用了。
如果 features 是一个数组,那么第二行是正确的,但是如果你将 features 作为字符串传递,那么第二行应该被删除,这条规则说验证你有两个参数称为 features 其中一个是字符串并且是必需的其他也是数组并且需要
'features' => 'required|array',
'features.*' => 'required|string',