2016-03-31 112 views
4

まず、悪い質問/練習である場合は、お詫び申し上げます。私はLaravelにとってはとても新しいので、まだそれを把握しています。Laravel Route経由で変数に ""と "/"を渡す

Laravel 5ルートでスラッシュ(/)とバックスラッシュ()を含む変数を渡そうとしていますが、いくつか問題があります。

私は以下を使用しています:api.dev/api/v1/service/DfDte\/uM5fy582WtmkFLJg==

試み1:私の最初の試みは、以下のコードを使用し、自然404

ルートをもたらし

Route::group(array('prefix' => 'api/v1'), function() { 
    Route::resource('service', 'ServiceController'); 
}); 

コントローラー:

public function show($service) { 
    return $service; 
} 

結果:

404 

試み2:

しかし私は、それが変換されるように見える、StackOverflowの上での検索のビットを行なったし、ほとんどの作品次のコードを、使用して終了\ to /。

ルート:

Route::group(array('prefix' => 'api/v1'), function() { 
    Route::get('service/{slashData}', '[email protected]') 
    ->where('slashData', '(.*)'); 
}); 

コントローラー:

public function getData($slashData = null) { 
    if($slashData) { 
     return $slashData; 
    } 
} 

結果:

DfDte//uM5fy582WtmkFLJg== 

あなたはそれがだ、見ることができるようにvarを渡しますが、\を/に変換しているようです。

私はAPIを作成しようとしていますが、残念ながら渡す変数が制御できません(たとえば、\や/は使用できません)。

誰にもアドバイスがありますか、または正しい方向に私を指すことができますか?

ありがとうございました。

+4

'apiの場合。dev/api/v1/service/DfDte \/uM5fy582WtmkFLJg == 'はリクエストURLを意図しているので、明らかに無効であることに注意してください。バックスラッシュはURL内の有効な文字ではありませんが、 "パーセントエンコード"する必要があります。実際には次のスラッシュをエスケープしたい場合は同様に、バックスラッシュは使用しないで、代わりにURLをエンコードしてください。 URLの正式な定義が要求するのと同様です。 – arkascha

+0

残念ながら、\は実際には変数として渡そうとしているIDの一部です。変数をエンコードしようとしました。 'DfDte%5C%2FuM5fy582WtmkFLJg%3D%3D'であるが、「試行2」で提供されたコードを使用して別の404につながる。 – tombraider

+1

確かにあなたのデータモデルはわかりませんが、リテラルシーケンス '\ /'を含むIDは私にはほとんど聞こえません。あなたは本当にこれが単なるスラッシュを逃れることを意図した表記ではないと確信していますか? – arkascha

答えて

0

元の質問のコメントからわかるように、URLに渡そうとしていた変数は、json_encodeを使用していた以前のAPI呼び出しの結果でした。 json_encodeは自動的にフォワードスラッシュをエスケープします。したがって、追加の\が変数に追加されます。元のコールにJSON_UNESCAPED_SLASHESフラグを追加して、すべてが期待通りに機能しています。

0

あなたはそうしてはいけません。 Laravelは "/"のために、それが新しいパラメータであると考えます。代わりに、パラメータにhtmlentititesとhtml_entity_decodeを使用するか、POSTを使用します。

関連する問題