Llo*_*nks 10 laravel laravel-5 laravel-5.2
我的网址看起来像:
http://example.com/api/user?id=45&name=mike&api_token=2348283
http://example.com/api/project?id=5&description=first&api_token=2348283
etc...
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我的功能看起来像:
public function user_get_endpoint(Request $request){
$request = $request->toArray();
return UserModel::where($request)->get()->toArray();
}
Run Code Online (Sandbox Code Playgroud)
由于$request对象包含一个api_token在user表中不存在的属性,因此上面将会中断.我正在使用api_token中间件来检查身份验证.
我可以api_token通过使用手动取消设置每个API函数中的属性unset($request['api_token'],但是如果可能的话我想避免这种情况.
无论如何要在应用程序范围内或在类或控制器级别执行此操作?
Sha*_*eza 19
Laravel提供了添加和删除功能,分别为请求对象添加和删除新属性.
$request->request->add(['api_token' => 'api_token']); // to add new property to $request
$request->request->remove('api_token'); // to remove property from $request
Run Code Online (Sandbox Code Playgroud)
jus*_*ajm 15
$request->except(['key1','key2',....])
Run Code Online (Sandbox Code Playgroud)
类似地,提供了一种跳过不需要的键的简单方法
$request->only(['key3','key4',....])
Run Code Online (Sandbox Code Playgroud)
提供了一种跳过所有其他不需要的键的简单方法,我发现它们几乎适用于所有场景
bis*_*hop 12
也许你想要全球中间件?
首先安排中间件在所有路由上运行:
// routes.php
$app->middleware([
App\Http\Middleware\Apitoken::class
]);
Run Code Online (Sandbox Code Playgroud)
然后定义中间件应该做什么:
// src/App/Http/Middleware/Apitoken.php
<?php
namespace App\Http\Middleware;
use Closure;
class Apitoken
{
public function handle($request, Closure $next)
{
unset($request['api_token']);
return $next($request);
}
}
Run Code Online (Sandbox Code Playgroud)
适用于所有 HTTP 方法的解决方案(不仅适用于 GET 和 HEAD):
$except = ['api_token'];
$request = request();
$cleanup = $request->except($except);
$request->query = new \Symfony\Component\HttpFoundation\ParameterBag($cleanup);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
22155 次 |
| 最近记录: |