【发布时间】:2018-06-06 07:29:04
【问题描述】:
我目前正在做一个小项目来学习一些 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']
];
}
}
【问题讨论】:
-
也许可以试试
'start' => ['required', 'date_format:Y-m-d H:i:s']或者如果没有日期过去就使用当前日期? -
分享您的代码,以便我们提供帮助。没有什么可调试的就很难了
-
@TheFallen 我想返回所有记录,如果 start 没有通过 :) 对不起,应该在我之前的帖子中说过
-
那么请分享您所指的控制器代码,以便我们根据您寻求的答案进行调整:)
标签: php laravel validation laravel-5