2016-10-28 6 views
1

コントローラレベルでのすべてのリクエストオブジェクトからパラメータを削除します。上記の意志Laravel 5 - 私がどのように見えるのURL持っ

public function user_get_endpoint(Request $request){ 

    $request = $request->toArray(); 
    return UserModel::where($request)->get()->toArray(); 

} 

:私のコントローラで

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... 

を、私がどのように見えるの機能を持っています$requestオブジェクトにuserテーブルに存在しないapi_tokenというプロパティが含まれているため、現在中断しています。ミドルウェアでapi_tokenを使用して認証を確認しています。

unset($request['api_token']を使用して、各API関数のapi_tokenプロパティを手動で設定解除することはできますが、可能な場合は避けてください。

このアプリケーションをワイドにするにはどうしたらいいですか?

+0

$ request =>( 'api_token') - > toArray();その反対側のみを使用してください。 –

+0

apiトークンのミドルウェアを表示できますか? –

答えて

4

おそらくあなたはglobal middlewareが必要ですか?

まずすべてのルート上で実行するためのミドルウェアを手配:

// routes.php 
$app->middleware([ 
    App\Middleware\Apitoken::class 
]); 

その後ミドルウェアは何をすべきかを定義します。

// src/App/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); 
    } 
} 
+0

これが受け入れられる解決策であるはずです。 Laravelは '$ request-> offsetUnset( 'api_token');でこのための構文的な砂糖を持っています。 – user1965074

0

理想的には、あなたの代わりに、URIのリクエストヘッダにごapi_tokenを送信する必要がありますparams。

あなたは、あなたのようにヘッダにapi_tokenを送信することができ、認証のためにLaravelのauth:apiミドルウェアを使用している場合:あなたのウリのparamsに来ることはありませんapi_tokenその後

$response = $client->request('GET', '/api/user', [ 
    'headers' => [ 
     'Accept' => 'application/json', 
     'Authorization' => 'Bearer '.$accessToken, 
    ], 
]); 

0

@JanWillemは、あなたがそれに渡すのparams削除なるexcept()を使用することができますコメントで言ったように:

public function user_get_endpoint(Request $request){ 

    return UserModel::where($request->except('api_token'))->get(); 
} 

https://laravel.com/docs/5.2/requests#retrieving-inputをして、さらにRetrieving A Portion Of The Input Data

までスクロールダウンし、あなたはありません応答を使ってtoArray()を使用すると、Laravelが自動的にこれを行います。

希望すると便利です。

1

Laravelは、要求オブジェクトに新しいプロパティを追加したり削除したりする追加機能と削除機能を提供します。

$request->request->add(['signindata' => 'signindata']); // to add new property to $request 
    $request->request->remove('signupdata'); // to remove property from $request 
関連する問題