我是Laravel的新手,想知道处理重复代码的最佳实用方法。
我的api-controller的所有功能几乎都在这个代码的开头:
// Validate parameters
$validator = Validator::make($request->all(), $this->validationRules);
if ($validator->fails()) {
return response()->json($validator->errors(), 422);
}
通常我会把它放在某个功能中。但是这个代码也用在很多其他控制器中。所以这个功能也应该被其他控制器调用。
在Laravel 5中处理这个问题的最佳做法是什么?我的第一个想法是用这个函数创建一个自己的Controller,而我的其他控制器会扩展它。
像:
class MyController extends Controller
{
protected function handleFailByPrameter($params)
{
....
}
}
class Api1Controller extends MyController
{
public function apicall1()
{
$this->handleFailByPrameter($this->validationRules());
}
}
但也许还有其他方法可以处理这类事情?
答案 0 :(得分:5)
您可以在助手this will help you do that中创建验证功能,然后从您的laravel应用程序中的任何位置(几乎任何地方)调用此新功能。您可以做的第二件事是创建自定义请求,这些请求将在以下列方式传递给您的函数之前验证您的数据:
首先从artisan生成一个新的请求类
php artisan make:request ExplicitRequestName
这将在app / Http / Requests文件夹下创建一个名为ExplicitRequestName.php的新文件,打开它,在您的authorize函数中将false切换为true,然后按以下方式定义验证规则:
public function rules()
{
return [
'email' => 'required',
'password' => 'required',
];
}
在你的函数中调用这个请求对象:
public function someFunction(Requests\ExplicitRequestName $request)
{
}
答案 1 :(得分:3)
Laravel 5.1的方法附加到控制器:
$this->validate($request, [your rules]);
如果有任何错误,它将重定向错误,或者如果它是ajax则发送错误响应。
要在每种方法中都没有定义规则,您可以在模型中进行设置:
public static $rules = ['Your rules']
然后您只需在控制器中进行验证,例如:
$this->validate($request, Post::rules);
答案 2 :(得分:0)
我认为你已经走上了正轨。我以这种方式为每个API实现了验证和身份验证,尽管在laravel 4上 。