如何从Laravel框架中的$ request-> all()中删除查询部分?

时间:2017-09-21 03:32:07

标签: php laravel laravel-5.4

在我的项目中,我使用$request->all()来获取参数。

$request->all()包含查询内容。当我将name => 1发布到我的API 'domain.com/api/users'

var_dump $request->all()

示例:

[
    'api/users' => null,
    'name'   => 1,    
]

我希望在'api/users' $request->all()中删除else if (name.equals("stockkeeper")){ JOptionPane.showMessageDialog(null, "Access Permitted"); StockKeeperUI aq = new StockKeeperUI(); aq.setVisible(true); } else{ JOptionPane.showMessageDialog(null, "Access Denied"); //if there is no matching as Admin, Cashier ,Stockkeeper then else part executed 。我该怎么办?

4 个答案:

答案 0 :(得分:4)

您可以使用“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

答案 1 :(得分:0)

您可以收集传递给一个变量的所有请求参数,如下所示:

$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();

因此,在这种情况下,您的cityaddress将与旧数据相同,但在前端您不知道最终用户正在更新哪些值,它可以是{ {1}},namecity您必须为最终用户提供灵活性。

假设您要检查空值然后存储它,您可以执行以下操作:

address

但在这种情况下,您还必须使用所有参数进行更新。

答案 2 :(得分:0)

虽然我不能保证我完全理解这个问题,但根据我的理解,过滤掉未作为请求的一部分发送的字段,然后使用request()->only(['field', 'field_2'])就足够了request->only 3}}关于field_2方法:

L5.5 upgrade notice

这意味着给定我的示例,如果请求中不存在$request->all(),则将其丢弃。

如果您使用Laravel 之前 5.5,那么request->only()将仅为您提供现有字段,否则您使用array_filter($request_array) L5.5您可以试试看看他们是如何工作的。

ON Laravel< = 5.4以及L5.5

最后,如果您仍然将这些字段设为null,那么您只需使用 $request_only = $request->all(); $requests_without_null_fields = array_filter($request_only); 例如:

     private void cameraIntent() {
    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
    startActivityForResult(intent, REQUEST_CAMERA);

}

这将删除所有空字段,仅保留非空字段。

希望这很有用。

答案 3 :(得分:0)

从Laravel 5.5开始,您也可以这样做:

$data = $request->except(array_keys($request->query()));

因为$request->query()只返回一个查询参数数组。