【发布时间】:2020-10-06 08:21:45
【问题描述】:
我正在尝试重构我的代码以提高可重用性。
我创建了一个特征 CrudControllerTrait 来实现 index、show、store、update、destroy 方法。 但是我发现了2个问题:
品牌控制器.php
public function store(BrandNewRequest $request)
{
$requestData = $request->validated();
return new BrandResource($this->brands->store($requestData));
}
ProductController.php
public function store(ProductNewRequest $request)
{
$requestData = $request->validated();
return new ProductResource($this->products->store($requestData));
}
特征方法是:
public function store(xxxxx $request)
{
$requestData = $request->validated();
return new xxxxxResource($this->repository()->store($requestData));
}
问题1:提示类型。我怎样才能抽象它们?如果我删除它表明错误:
"message": "Too few arguments to function App\\Http\\Controllers\\BrandController::store(), 0 passed and exactly 1 expected"
问题2:返回资源。如何创建新资源?在集合上我可以解决它:
public function index()
{
$models = $this->repository()->index();
return $this->resource()::collection($models);
}
资源在使用 trait 的控制器上:
public function resource()
{
return BrandResource::class;
}
但是单一资源不知道该怎么做......
我的想法是,我有很多控制器使用相同的模式:BrandController、ProductController 等。我很想在相同的 trait 上重用这 5 个 crud 方法...
【问题讨论】:
-
Problem1:试试Illuminate\Http\Request或Illuminate\Foundation\Http\FormRequest
标签: laravel crud traits code-reuse