Laravel 5:如何处理许多控制器中使用的代码

And*_* S. 2 php laravel laravel-5

我是Laravel的新手,想知道处理重复代码的最佳实用方法.

我几乎在我的api-controller的所有功能中开始使用此代码:

// Validate parameters
$validator = Validator::make($request->all(), $this->validationRules);
if ($validator->fails()) {
    return response()->json($validator->errors(), 422);
}
Run Code Online (Sandbox Code Playgroud)

所以通常我会把它放在某个功能中.但是这个代码也用在很多其他控制器中.所以这个功能也应该被其他控制器调用.

在Laravel 5中处理这个问题的最佳做法是什么?我的第一个想法是使用此功能制作一些自己的控制器,而我的其他控制器将扩展它.

喜欢:

class MyController extends Controller
{
    protected function handleFailByPrameter($params)
    {
         ....
    }
}


class Api1Controller extends MyController
{
     public function apicall1()
     {
          $this->handleFailByPrameter($this->validationRules());
     }
}
Run Code Online (Sandbox Code Playgroud)

但也许有其他一些方法来处理这类事情?

Kha*_*ukh 5

您可以创建在您的帮助验证功能,这将帮助你做到这一点,然后从任何地方在您的laravel应用(随时随地字面意思)把这种新的功能.你可以做的第二件事情是创建它被传递到下面的方式你的函数之前,将验证您的数据的自定义请求:

首先从工匠生成一个新的请求类

php artisan make:request ExplicitRequestName
Run Code Online (Sandbox Code Playgroud)

这将创造下的应用程序/ HTTP /名为ExplicitRequestName.php一个新的文件请求文件夹中打开它,在你的授权功能切换假为真,然后定义下列方式您的验证规则:

public function rules()
{
    return [
        'email' => 'required',
        'password' => 'required',
    ];
}
Run Code Online (Sandbox Code Playgroud)

在函数中调用此请求对象:

public function someFunction(Requests\ExplicitRequestName $request)
{
}
Run Code Online (Sandbox Code Playgroud)