首页 > 解决方案 > 如何从控制器中分离请求以使代码更清晰

问题描述

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

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

这在我的控制器中为 10 种方法增加了 100 行代码,我想让我的控制器简短易读,所以我想知道是否有任何方法可以将此代码从我的控制器中分离出来并在我的控制器中接收它们并使用它们在我的方法中,所以我的代码将变得更清晰,更易读

标签: phplaravel

解决方案


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

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())
  }
}

推荐阅读