繁体   English   中英

Laravel 5.1:处理RESTful API中的缺失字段

[英]Laravel 5.1: Handling missing fields in RESTful API

在我的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文件中未提及我的方法。

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

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

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

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

如果不满足验证规则,这将验证传入的请求并抛出HttpResponseException

Laravel的Validator是功能强大的工具-您可以在此处了解更多信息: http : //laravel.com/docs/5.1/validation

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

并将此代码放入其handle函数中

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

我认为它将为您工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM