Laravel 5.2查询字符串参数验证

时间:2018-06-06 07:29:04

标签: php laravel validation laravel-5

我目前正在做一个小项目来学习一些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']
        ];
    }
}

1 个答案:

答案 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;
}