Son*_*Son 21 php forms laravel
是否可以使用其他字段的规则验证请求,或从请求中删除该字段?
简单的例子,我有FormRequest对象的规则:
public function rules() {
return [
'id' => 'required|integer',
'company_name' => 'required|max:255',
];
}
Run Code Online (Sandbox Code Playgroud)
当我得到任何其他字段的发布请求时,我想在控制器中获得错误/异常,或者我想只获取id和company_name字段,而没有任何其他字段.它与laravel中存在任何特征,或者我必须按照我的方式制作它?
Ant*_*hev 17
要从Laravel中的请求中删除密钥,请使用:
$request->request->remove('key')
Run Code Online (Sandbox Code Playgroud)
Can*_*lik 14
使用laravel的帖子请求包含的内容多于表单输入,因此您需要检查请求以查看其中的内容.
要只获取您想要的字段,您可以使用:
$request->only(['fieldname1', 'fieldname2', 'fieldname3']);
Run Code Online (Sandbox Code Playgroud)
要么
$request->except(['fieldnameYouDontWant1', 'fieldnameYouDontWant2', 'fieldnameYouDontWant3']);
Run Code Online (Sandbox Code Playgroud)
排除你不想要的.
小智 6
从 Laravel 5.5 开始,您可以validate直接调用方法,Request例如
class YourController extends Controller
{
public function store(Request $request) {
$cleanData = $request->validate([
'id' => 'required|integer',
'company_name' => 'required|max:255',
]);
// Now you may safely pass $cleanData right to your model
// because it ONLY contains fields that in your rules e.g
$yourModel->create($cleanData);
}
}
Run Code Online (Sandbox Code Playgroud)
从Laravel 5.5开始,您可以在控制器中执行以下操作:
public function store(StoreCompanyRequest $request)
{
Company::create($request->validated());
}
Run Code Online (Sandbox Code Playgroud)
validated()函数仅返回已验证的字段,并删除其他所有内容。
不幸的是,这里的大多数答案都没有抓住原始问题的重点。也就是说,您想在 FormRequest 类中指定需要验证的字段,然后在您的控制器中执行以下操作:
Something::create($request->validated());
但是,您可能想要验证特定字段,但不想将其传递给create控制器中的方法。执行$request->only()or的问题$request->except()是您必须重复 FormRequest 类中的字段,或者在$guarded模型的属性中重复它们。
不幸的是,我发现做你想做的唯一方法如下:
Something::create(collect($request->validated())->forget('field_you_dont_want')->toArray());
2020 年 10 月编辑
感谢 Laravel 论坛上的人们,在 Laravel 7 中 Request 类是可宏化的。所以更好的答案是编辑app/Providers/AppServiceProvider.php并在boot()方法中添加:
// Extend the validated() method
Request::macro('validatedExcept', function($except = []) {
return Arr::except($this->validated(), $except);
});
Run Code Online (Sandbox Code Playgroud)
你需要添加
use Illuminate\Support\Arr;
到顶部app/Providers/AppServiceProvider.php太。
然后你就可以使用:
$request->validatedExcept(['field_to_ignore', 'another_field_to_ignore']);
Run Code Online (Sandbox Code Playgroud)