2016-05-24 12 views
0

私にはgetとpostメソッドの2つのルートがあります。 GETルートに関しては、私はルートにある2つの余分なパラメータを持っているので、POSTメソッドが呼び出されたとき、それは誤りいくつかのパラメータがlaravelの同じメソッドに異なるパラメータを持つ別のルート

のroutes.phpファイルが欠落していると言い、

Route::get('/abc/{one}/{two}','[email protected]'); 
Route::post('/abc','[email protected]'); 

コントローラファイル、

someFunction(Request $req, $first,$second){ 

problem is here when i use post method as there are no parameters 
and this function is expecting $first and $second parameters 

} 

私は2つの方法を使用する場合、すべてのコードは同じです。私は取得するためのURLからそれらのパラメータを取得し、私はフォームからそれらを取得します。コードはすべて同じです。その冗長です。あなたがポストを送信し、同じ方法に両方の要求を取得したい

+0

コントローラで2つの方法を使用しますか?なぜあなたはこれをやろうとしているのですか?問題は何を解決しますか? – Steve

+1

もちろん、デフォルトのパラメータを使用することもできます( 'function($ first = null、$ second = null){if($ first){...}')まあ、yuk。それをしないでください - 別の方法を作成する! – Steve

+0

は現在2つのメソッドを使用していますが、すべてのコードはほぼ同じですが、postメソッドの2つのパラメータがフォームから取得され、取得メソッドがUrlから取得しています。私はその冗長性を感じる – Mann

答えて

1

、可能な場合には、第三のプライベートメソッドにあなたの方法のコードの大部分をリファクタリングし、からそれを呼び出すこの

someFunction(Request $req, $first = null, $second = null){ 

}

+0

@Steveコメントとともに($ first){}が答えを完成する – Mann

1

を試してみてください2「アクション」メソッド

class SomeController 
{ 

    private function doStuff($first, $second) 
    { 
     //lots of 
     //code here 
     //that you dont want 
     //to duplicate 
     return $first . $second; 
    } 

    public function getSomething($first, $second) 
    { 
     return $this->doStuff($first, $second); 

    } 

    public function postSomething($request) 
    { 
     return $this->doStuff($request->first, $request->second); 

    } 

} 

doStuff内のロジックが非常に長い場合、あなたはそのロジックを処理するためにさらに一歩進み、別のクラスを作成することができます、とINJ

class SomeService 
{ 
    public function doStuff($first, $second) 
    { 
     return $first . $second; 
    } 
} 

class SomeController 
{ 
    protected $someService; 

    public function __construct(SomeService $service) 
    { 
     $this->someService = $service; 
    } 


    public function getSomething($first, $second) 
    { 
     return $this->someService->doStuff($first, $second); 

    } 

    public function postSomething($request) 
    { 
     return $this->someService->doStuff($request->first, $request->second); 

    } 

} 
関連する問題