在构建控制器时,让验证规则来自注入的存储库是不好的做法吗?作为示例,请考虑以下接口:
interface UserRepository
{
/**
* @return array
*/
public function getCreateRules();
}
然后可以在控制器的store
方法中找到此功能的用法:
class UserController extends Controller
{
private $repo;
public function __construct(UserRepository $repo)
{
$this->repo = $repo;
}
public function store(Request $request)
{
$this->validate($request, $this->repo->getCreateRules());
...
}
}
我的问题是,是否通过将规则移至业务层来解决问题。这个想法来自2014年的这篇Medium帖子,所以我想知道,考虑到它的年龄,这是否是有效的资源。
我个人不会为此使用存储库,而是使用FormRequest
。
https://laravel.com/docs/5.4/validation#form-request-validation
这条路:
另外,如果您需要在创建和更新时使用不同的规则,则可以使用简单的switch语句,例如
public function rules()
{
switch ($this->method()) {
case 'GET':
return [
//Create rules
];
case 'PUT':
case 'PATCH':
return [
//Update rules
];
}
}
您的store
方法将如下所示:
public function store(UserRequest $request)
{
//Validation will have already been handled by this point so you
//don't need to add it manually
...
}
希望这可以帮助!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句