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。
创建一个DisableNoPaginate
中间件:
php artisan make:middleware DisableNoPaginate
然后定义中间件应该做什么(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);
}
}
安排中间件在所有路由上运行(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
我想这会对你有所帮助。
在我的 Laravel 5.8 应用程序中,我有许多 API 路由 return 分页结果。如果我向 API 发出请求并附加以下查询字符串,我可以禁用分页。
http://api.test/users/?no_paginate=1
我的问题是...如何禁止在某些路线上使用 no_paginate?我希望在请求 class 中进行一些验证,但我在 docs 中找不到任何东西。
您可以使用 Global Middleware。
创建一个
DisableNoPaginate
中间件:php artisan make:middleware DisableNoPaginate
然后定义中间件应该做什么(
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); } }
安排中间件在所有路由上运行(
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
我想这会对你有所帮助。