Laravel 验证 - 禁止请求参数的规则

Laravel Validation - Rule to disallow request parameters

在我的 Laravel 5.8 应用程序中,我有许多 API 路由 return 分页结果。如果我向 API 发出请求并附加以下查询字符串,我可以禁用分页。

http://api.test/users/?no_paginate=1

我的问题是...如何禁止在某些路线上使用 no_paginate?我希望在请求 class 中进行一些验证,但我在 docs 中找不到任何东西。

您可以使用 Global Middleware

  1. 创建一个DisableNoPaginate中间件:

    php artisan make:middleware DisableNoPaginate
    
  2. 然后定义中间件应该做什么(DisableNoPaginate.php):

    <?php
    namespace App\Http\Middleware;
    
    use Closure;
    
    class DisableNoPaginate
    {
        public function handle($request, Closure $next)
        {
            //remove no_paginate param from request object
            unset($request['no_paginate']);
    
            return $next($request);
        }
    }
    
  3. 安排中间件在所有路由上运行(routes.php):

    $app->middleware([
        App\Http\Middleware\DisableNoPaginate::class
    ]);
    

现在,no_paginate 查询参数应该从所有传入请求中删除。

为了让用户分页或通过以下代码获取所有列表的最佳方法 UsersController

public function index($type = null, Request $request)
{
    $builder = User::where(/*query*/);

    if($type == "paginate") {
        $items = $builder->paginate(10);
    } else {
        $items = $builder->get();
    }

    return view("users.index", ['users' => $items]);
}

这里是web.php/api.php文件中的路由

Route::get('/{type?}', ['as' => 'users.index', 'uses' => 'UsersController@index']);

这里url会

http://api.test/users/paginate // get pagination response.
http://api.test/users          // get response without pagination

我想这会对你有所帮助。