Php 不同参数的不同路径在laravel中的相同方法

Php 不同参数的不同路径在laravel中的相同方法,php,laravel-5,routing,Php,Laravel 5,Routing,我有两条路线,一条是get路线,另一条是post路线。 对于get route,我在route中有两个额外的参数,所以当调用post方法时,它会显示错误,某些参数丢失 Routes.php文件 Route::get('/abc/{one}/{two}','MainController@someFunction'); Route::post('/abc','MainController@someFunction'); 控制器文件 someFunction(Request $req, $first

我有两条路线,一条是get路线,另一条是post路线。 对于get route,我在route中有两个额外的参数,所以当调用post方法时,它会显示错误,某些参数丢失

Routes.php文件

Route::get('/abc/{one}/{two}','MainController@someFunction');
Route::post('/abc','MainController@someFunction');
控制器文件

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

}

如果我使用两种方法,所有代码都是相同的。对于get,我将从url获取这些参数;对于post,我将从表单获取这些参数。所以代码都是一样的。它是多余的。

您希望将post和请求发送到同一个方法,如果可能,请尝试此方法

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

}

将大部分方法代码重构为第三个私有方法,并从两个“action”方法调用它

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
中的逻辑相当长,您可能需要更进一步,创建一个单独的类来处理该逻辑,并将其注入控制器:

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);

    }

}

在控制器中使用两种方法??为什么要这样做?它解决了什么问题当然可以使用默认参数(
函数($first=null,$second=null){if($first){…}
)但是,好吧,yuk。不要这样做-创建一个单独的方法!目前我使用两个方法,所有代码几乎相同,post方法中的这两个参数来自表单,get方法中的这两个参数来自Url。我觉得它的冗余是冗余的,我将向您展示如何重构它。理想情况下,将您的实际代码与@S一起发布,以获得更好的示例如果($first){}完成了回答,请给出注释