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

时间:2015-10-16 06:59:28

标签: 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);
}

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

在Laravel 5中处理这个问题的最佳做法是什么?我的第一个想法是用这个函数创建一个自己的Controller,而我的其他控制器会扩展它。

像:

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


class Api1Controller extends MyController
{
     public function apicall1()
     {
          $this->handleFailByPrameter($this->validationRules());
     }
}

但也许还有其他方法可以处理这类事情?

3 个答案:

答案 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上 。