使用 Laravel 分发控制器代码的最佳实践是什么?
例:任务控制器使用特定的请求并访问具有任务列表的特定模型方法。
OrganisationTaskTreeController 使用不同的请求访问任务实体上的相同方法,但也使用与 OrganisationController 共享的方法获取 OrganisationTree 资源。
法典:
class TaskController extends BaseController {
public function getTask(Request $request)
{
$_match = [];
if ($request->has('types'))
{
$_match['type'] = ['$in' => $request->get('types')];
}
if ( ! $request->has('group'))
{
throw new InvalidParameter("Undefined group parameter");
}
....
}
class OrganisationTaskTreeController extends BaseController {
public function getOrganizationTree(Request $request)
{
$_match = [];
$_tree = [];
if ($request->has('types'))
{
$_match['type'] = ['$in' => $request->get('types')];
}
if ( ! $request->has('group'))
{
throw new InvalidParameter("Undefined group parameter");
}
if ($request->has('unti'))
{
$_tree['unit'] = $request->get('unit');
}
....
}
}
如何不复制此代码?
我认为控制器不应该通过设计进行扩展,因为使用许多控制器的方法。这将是矫枉过正。
我在想:
- 性状
- HMVC
- 控制器即服务
- 还是做一个消耗$request的仓库会很好?
也许你可以重构你想要重用的代码,到两个类可以扩展的基类上的方法,例如类TaskController扩展BaseController,BaseClass。然后,可以在扩展 BaseClass 的每个类上使用该方法。
一个自定义请求对象怎么样,您可以在需要它进行特定验证的任何方法中键入提示? https://www.laravel.com/docs/5.2/validation#form-request-validation