构建控制器时,验证规则是否来自注入的存储库是不好的做法?例如,请考虑以下界面:
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年的this中等帖子,所以我想知道这是否是适合其年龄的有效资源。
答案 0 :(得分:2)
我个人不会为此使用存储库而是使用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
...
}
希望这有帮助!