使用Laravel分发控制器代码的最佳做法是什么?
实施例: TaskController消耗特殊请求并访问具有任务列表的特定模型方法。
OrganisationTaskTreeController使用不同的请求访问Task Entity上的相同方法,但也使用与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');
}
....
}
}
如何不复制此代码?
我认为控制器不应该通过设计进行扩展,因为使用了许多控制器的方法。这将是一种矫枉过正。
我正在考虑:
答案 0 :(得分:0)
也许您可以将要重用的代码重构为两个类可以扩展的基类上的方法,例如,类TaskController扩展BaseController,BaseClass。然后,您可以在扩展BaseClass的每个类上使用该方法。
答案 1 :(得分:0)
如果自定义请求对象可以键入到需要该特定验证的任何方法中,那该怎么办? https://www.laravel.com/docs/5.2/validation#form-request-validation