我目前正在做一个小项目来学习一些laravel验证并遇到问题。
API端点为api/test/schoolbook?start=
,我的验证是
'start' => ['date_format:Y-m-d H:i:s']
虽然这有点像魅力并且在开始的一年对教科书进行排序,但我认为我的验证有一些错误。它验证start是否等于定义的日期格式,一切都很好。但是,如果我现在只解析?start=
没有任何东西,它仍然会通过,但不会抛出错误消息(它只返回所有内容而不进行排序)
有没有办法可以更好地验证这一点并防止查询字符串参数为空?
如果start
没有通过,它应该返回所有记录,所以我不能让它真的需要。
所以场景是:
?start=date
以正确的格式传递,并按照过去的日期返回所有教科书,
未传递?start=date
并返回数据库中的所有记录
?start=
还应返回“必须在日期格式验证中”
谢谢!
控制器:
public function findSchoolbook(
SchoolBookRequest $request,
) : JsonResponse {
$schoolbook = $this->schoolkbool->sort($paramBag);
$response = $this->transformer()->paginator($schoolbook);
return $this->response($response);
}
我使用的ParamBg方法
private function getParamBag(SchoolBookRequest $request) : ParamBag
{
return ParamBag::create()
->setPage($request->get('page'))
->setPerPage($request->get('per_page'))
->setStartDate($request->get('start_at'))
}
请求
class SchoolBookRequest extends Request
{
public function rules() : array
{
return [
'start_at' => ['date_format:Y-m-d H:i:s']
];
}
}
答案 0 :(得分:0)
这应仅在请求中出现的开始日期过滤:
private function getParamBag(SchoolBookRequest $request) : ParamBag
{
$parambag = ParamBag::create()
->setPage($request->get('page'))
->setPerPage($request->get('per_page'))
if ($request->has('start_at')) {
$parambag = $parambag->setStartDate($request->get('start_at'));
}
return $parambag;
}