在我的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
文件中未提及我的方法。
实现此功能的最灵活,最优雅的方法是什么,而不重复自己?
答案 0 :(得分:1)
Laravel的验证器就是您所需要的。
如果您有控制器类,则只需在操作方法中添加以下内容:
$this->validate($this->request, [
'email' => 'required|email',
'password' => 'required',
'firstname' => 'required',
'lastname' => 'required',
]);
如果不符合验证规则,这将验证传入的请求并抛出 HttpResponseException 。
Laravel的验证器是一个功能强大的工具 - 您可以在此处阅读更多相关信息:http://laravel.com/docs/5.1/validation
答案 1 :(得分:0)
我认为,中间件将是最好的选择。中间件很棒。
只需使用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");
}
}
我认为这对你有用。