Php 不同参数的不同路径在laravel中的相同方法
我有两条路线,一条是get路线,另一条是post路线。 对于get route,我在route中有两个额外的参数,所以当调用post方法时,它会显示错误,某些参数丢失 Routes.php文件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
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){}完成了回答,请给出注释