【问题标题】:Laravel 5.2 Query String Parameter ValidationLaravel 5.2 查询字符串参数验证
【发布时间】: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


【解决方案1】:

这应该只在请求中出现时过滤开始日期:

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

【讨论】:

    猜你喜欢
    • 2018-05-09
    • 2017-12-28
    • 1970-01-01
    • 2016-07-07
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多