【问题标题】:Laravel 5.1: Handling missing fields in RESTful APILaravel 5.1:处理 RESTful API 中的缺失字段
【发布时间】:2015-10-22 09:22:22
【问题描述】:

在我的 Laravel 5.1 应用程序中,我有一个用作 RESTful API 的控制器。这个控制器的很多方法都有如下一段代码:

foreach (['email', 'password', 'firstName', 'lastName'] as $parameter) {
    if (!$this->request->has($parameter)) {
        throw new InputException(400, $parameter, 'Missing ' . $parameter . ' parameter.');
    }
}

我知道重复同一段代码(具有不同的数组内容)并不是最好的主意。相反,我正在寻找一些优雅的方式来实现同样的目标。

我想到了带参数的中间件,在 routes.php 中是这样的:

'middleware' => 'parameters:email,password,firstName,lastName'

目前我使用的是隐式控制器,所以routes.php 文件中没有提到我的方法。

在不重复自己的情况下实现此功能的最灵活、最优雅的方式是什么?

【问题讨论】:

  • 仅仅因为答案不适合您,并不意味着您需要对其进行否决。无论如何,也反对你的问题。祝你好运
  • 我投了反对票,因为你的代码很糟糕,而且比我已经拥有的要糟糕得多。
  • 顺便说一句,因为butthurt而对好问题投反对票真的很可悲。
  • 我们通过赞成票的数量而不是反对票的数量来计算一个好问题...

标签: php laravel laravel-5 laravel-middleware


【解决方案1】:

Laravel 的验证器是你所需要的。

如果你有一个控制器类,你可以在 action 方法中添加以下内容:

 $this->validate($this->request, [
    'email' => 'required|email',
    'password' => 'required',
    'firstname' => 'required',
    'lastname' => 'required',
]);

这将验证传入的请求并在不满足验证规则时抛出 HttpResponseException

Laravel 的验证器是一个强大的工具 - 你可以在这里阅读更多关于它的信息:http://laravel.com/docs/5.1/validation

【讨论】:

  • 致那些不赞成答案的人 - 我很想知道为什么这个解决方案不好:)
  • 提出问题的人是拒绝投票答案的人。我也反对他的问题
【解决方案2】:

我认为,中间件是最好的选择。中间件很棒。 只需使用php artisan make:middleware SomeMiddlewareName 创建一个中间件

并将这段代码放在它的句柄函数中

public function handle($request, Closure $next)
{

    $data = array(
        'email' => $request->input('email'),
        'password' => $request->input('password'),
        'firstname' => $request->input('firstname'),
        'lastname' => $request->input('lastname'),
    );

    //Delete array fields that Have null or empty values
    $data = array_filter($data);

    if (sizeof($data) == 4) {
            //Send the user to the required controller
            return $next($request);
    } else {
        //Else, throw whatever error you want to throw
        throw new InputException("Enter all required parameters");
    }
}

我认为它对你有用。

【讨论】:

    猜你喜欢
    • 2015-11-05
    • 2014-12-21
    • 2017-09-29
    • 2017-04-16
    • 2023-01-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-07
    相关资源
    最近更新 更多