如何从 Laravel 框架中的 $request->all() 中删除查询部分?
How to remove query part from $request->all() in Laravel framework?
在我的项目中,我使用 $request->all()
来获取参数。
但是$request->all()
包括查询的东西。当我post一个name => 1
到我的API'domain.com/api/users'
var_dump $request->all()
示例:
[
'api/users' => null,
'name' => 1,
]
我想在我的每个 $request->all()
中删除 'api/users'
。我该怎么办?
您可以收集所有传递到一个变量中的请求参数,如下所示:
$data = $request->only(['name', 'other_request_variables']);
然后根据需要使用它。
编辑:
当您尝试更新模型时,您需要传递视图中的所有变量,即即使旧数据没有用新数据更新,您也需要传递表单中的所有数据,
在控制器中你可以这样做:
$user = User::find($request->id);
获取所有数据并发送回表单中的视图,在发送表单数据时您需要发送所有数据:
$data = $request->(['id', 'name', 'city', 'address']);
$user = User::find($data['id']);
$user->name = $data['name'];
$user->city= $data['city'];
$user->address = $data['address'];
$user->save();
如果您不传递旧数据,那么上面的代码将更新为相同的 null
值。
并且假设您不想使用空值更新那么您不必调用它,假设您只调用名称和 ID 然后只需简单地写:
$data = $request->(['id', 'name', 'city', 'address']);
$user = User::find($data['id']);
$user->name = $data['name'];
$user->save();
所以在这种情况下,您的 city
和 address
将与旧数据相同,但在前端您不知道最终用户正在更新什么值,它可以是 name
、city
或 address
您必须为最终用户提供灵活性。
假设您想检查空值然后存储它,您可以这样做:
$data = $request->(['id', 'name', 'city', 'address']);
$user = User::find($data['id']);
$user->name = $data['name']: $data['name'] ? $user->name;
$user->city= $data['city'] : $data['city'] ? $user->city;
$user->address = $data['address'] : $data['address'] ? $user->address;
$user->save();
但在这种情况下,您还必须更新所有参数。
您可以使用"except"或"only"方法来过滤您的请求数据。
$data = $request->except('key-that-you-dont-want-in-request');
// OR
$data = $request->only(['key-that-you-want-in-request', 'another-key']);
你可以在这里了解更多
https://laravel.com/docs/5.5/requests#retrieving-input
虽然我不能保证我完全理解这个问题,但根据我的理解,要过滤掉未作为请求的一部分发送的字段,那么使用 request()->only(['field', 'field_2'])
应该足够了L5.5 upgrade notice 关于 request->only
方法:
这意味着在我的示例中,如果请求中不存在 field_2
,则将其丢弃。
如果您在 Laravel BEFORE 5.5 上,那么 $request->all()
将只为您提供现有字段,否则对于 L5.5,您使用 request->only()
你可以试一试,看看它们是如何工作的。
ON Laravel <= 5.4 和 L5.5
最后,如果您仍然将这些字段设为空,那么您可以简单地使用 array_filter($request_array)
例如:
$request_only = $request->all();
$requests_without_null_fields = array_filter($request_only);
这将删除所有为空的字段,只保留非空的字段。
希望这有用。
因为Laravel 5.5你也可以这样做:
$data = $request->except(array_keys($request->query()));
因为$request->query()
returns只有查询参数的数组。
在我的项目中,我使用 $request->all()
来获取参数。
但是$request->all()
包括查询的东西。当我post一个name => 1
到我的API'domain.com/api/users'
var_dump $request->all()
示例:
[
'api/users' => null,
'name' => 1,
]
我想在我的每个 $request->all()
中删除 'api/users'
。我该怎么办?
您可以收集所有传递到一个变量中的请求参数,如下所示:
$data = $request->only(['name', 'other_request_variables']);
然后根据需要使用它。
编辑:
当您尝试更新模型时,您需要传递视图中的所有变量,即即使旧数据没有用新数据更新,您也需要传递表单中的所有数据,
在控制器中你可以这样做:
$user = User::find($request->id);
获取所有数据并发送回表单中的视图,在发送表单数据时您需要发送所有数据:
$data = $request->(['id', 'name', 'city', 'address']);
$user = User::find($data['id']);
$user->name = $data['name'];
$user->city= $data['city'];
$user->address = $data['address'];
$user->save();
如果您不传递旧数据,那么上面的代码将更新为相同的 null
值。
并且假设您不想使用空值更新那么您不必调用它,假设您只调用名称和 ID 然后只需简单地写:
$data = $request->(['id', 'name', 'city', 'address']);
$user = User::find($data['id']);
$user->name = $data['name'];
$user->save();
所以在这种情况下,您的 city
和 address
将与旧数据相同,但在前端您不知道最终用户正在更新什么值,它可以是 name
、city
或 address
您必须为最终用户提供灵活性。
假设您想检查空值然后存储它,您可以这样做:
$data = $request->(['id', 'name', 'city', 'address']);
$user = User::find($data['id']);
$user->name = $data['name']: $data['name'] ? $user->name;
$user->city= $data['city'] : $data['city'] ? $user->city;
$user->address = $data['address'] : $data['address'] ? $user->address;
$user->save();
但在这种情况下,您还必须更新所有参数。
您可以使用"except"或"only"方法来过滤您的请求数据。
$data = $request->except('key-that-you-dont-want-in-request');
// OR
$data = $request->only(['key-that-you-want-in-request', 'another-key']);
你可以在这里了解更多 https://laravel.com/docs/5.5/requests#retrieving-input
虽然我不能保证我完全理解这个问题,但根据我的理解,要过滤掉未作为请求的一部分发送的字段,那么使用 request()->only(['field', 'field_2'])
应该足够了L5.5 upgrade notice 关于 request->only
方法:
这意味着在我的示例中,如果请求中不存在 field_2
,则将其丢弃。
如果您在 Laravel BEFORE 5.5 上,那么 $request->all()
将只为您提供现有字段,否则对于 L5.5,您使用 request->only()
你可以试一试,看看它们是如何工作的。
ON Laravel <= 5.4 和 L5.5
最后,如果您仍然将这些字段设为空,那么您可以简单地使用 array_filter($request_array)
例如:
$request_only = $request->all();
$requests_without_null_fields = array_filter($request_only);
这将删除所有为空的字段,只保留非空的字段。
希望这有用。
因为Laravel 5.5你也可以这样做:
$data = $request->except(array_keys($request->query()));
因为$request->query()
returns只有查询参数的数组。