2017-08-29 83 views
0

我想问你一些关于Laravel的SOLID原则,其实这是关于单一责任原则的问题。Laravel的SOLID

我们假设我有ExcelController类,其中我将用户导入数据库。我也有UserController其中我有createUser方法。问题是ExcelController无法从UserController扩展,因为它已经从Controller扩展。所以在这种情况下,我应该创建UserTrait并在那里放置createUser方法?

什么是最好的方法?

+2

'createUser'应的方法模型。 –

+0

为什么你不使用用户模型? –

+0

是的,谢谢你,我应该把它放在模型中。 –

回答

3

我宁愿建议您创建服务User并且拥有此服务中的所有方法。而从ExcelController电话:

(new UserService())->import($parameters); 

,并从UserController电话:

(new UserService())->create($parameters); 

在laravel你可以使用Service Container和写类似:

$userService = $this->app->make('UserService'); 
$userService->import($parameters); 
// or 
$userService->create($parameters); 
+0

使用此解决方案而不是将创建方法置于用户模型中的优点是什么? –

+0

你将拥有1层这样的东西,不要与模型混合。 另外,如果您的方法与模型1相关的模型与模型2相关的数量很多 - 不清楚这个方法必须放置在模型1还是模型2中,但是使用这种方法它只有一层 - 服务'。 –

+0

谢谢你的努力。 –