如何将请求与控制器分开以简化代码

时间:2019-07-16 07:21:02

标签: php laravel

在某些情况下,在我的控制器中,我必须从客户端接收12个参数,并且每个变量都必须喜欢以下内容:

$something = $request->get('something');

这使我的控制器中增加了100行代码,以支持10种方法,我想使我的控制器简短易读,所以我想知道是否有任何方法可以将该代码与我的控制器分开并在我的控制器中接收它们控制器并在我的方法中使用它们,这样我的代码将变得更简洁,更易读

2 个答案:

答案 0 :(得分:2)

创建服务类以将逻辑放入其中:

class IngredientService
{
    /**
     * @param array $data
     *
     * @return mixed
     */
    public function storeIngredient(array $data)
    {
        $ingredient = Ingredient::create([
            'unit_id' => array_get($data, 'unit_id'),
            'price' => array_get($data, 'price'),
            'name' => array_get($data, 'name')
        ]);

        return $ingredient;
    }
}

然后按如下所示在控制器中使用它:

class IngredientController {
  public function store(Request $request, IngredientService $ingredientService)
  {
    $ingredient = $ingredientService->store($request->toArray())
  }
}

答案 1 :(得分:0)

您可以获取表列,然后检查请求中是否具有该列名,如果有,则将数据添加到数据库中。第一步是将其放入模型中

模型

public function getTableColumns() {
    return $this->getConnection()->getSchemaBuilder()->getColumnListing($this->getTable());
}

然后在控制器方法中保存数据:

控制器

    $something = new Something();
    $somethingColumns = $something->getTableColumns();
    foreach($somethingColumns as $column){
        if(request($column)){
            $something->$column = request($column);
        }
    }
    $something->save();