【问题标题】:Laravel 5: How to handle code that is used in many ControllersLaravel 5:如何处理在许多控制器中使用的代码
【发布时间】:2015-10-16 15:53:45
【问题描述】:

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

在我的 api-controllers 的所有功能中,我一开始都有这段代码:

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

所以通常我会把它放在一些函数中。但是此代码也用于许多其他控制器。所以这个函数也应该被其他控制器调用。

在 Laravel 5 中处理该问题的最佳实践是什么?我的第一个想法是用这个功能制作一些自己的控制器,我的其他控制器会扩展它。

喜欢:

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


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

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

【问题讨论】:

  • 汗的回答适合你的需要

标签: php laravel laravel-5


【解决方案1】:

你可以在你的助手this will help you do that 中创建一个验证函数,然后从你的 laravel 应用程序的任何地方(字面上的任何地方)调用这个新函数。您可以做的第二件事是创建自定义请求,该请求将在通过以下方式将数据传递给您的函数之前验证您的数据:

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

php artisan make:request ExplicitRequestName

这将在 app/Http/Requests 文件夹下创建一个名为 ExplicitRequestName.php 的新文件,打开它,在您的授权函数中将 false 切换为 true,然后按以下方式定义您的验证规则:

public function rules()
{
    return [
        'email' => 'required',
        'password' => 'required',
    ];
}

在你的函数中调用这个请求对象:

public function someFunction(Requests\ExplicitRequestName $request)
{
}

【讨论】:

  • 第二种方法是最好的方法
  • aah 我已经在使用我自己修改过的请求,我想我不把这段代码放在那里是盲目的......非常感谢你的提示!
【解决方案2】:

Laravel 5.1 有一个附加到 Controller 的方法:

$this->validate($request, [your rules]);

如果有任何错误,它会重定向回来,如果是 ajax,它会发送错误响应。

要不在每个方法中定义你的规则,你可以在你的模型中设置:

public static $rules = ['Your rules']

然后您可以简单地在控制器中进行验证,例如:

$this->validate($request, Post::rules);

【讨论】:

    【解决方案3】:

    我认为你已经在正确的轨道上。我以这种方式为每个 API 实现了验证和身份验证,尽管在 laravel 4 上 .

    【讨论】:

    • 这应该作为评论发布而不是回答(只是说)
    猜你喜欢
    • 1970-01-01
    • 2015-04-29
    • 2015-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-12
    • 2020-07-27
    • 1970-01-01
    相关资源
    最近更新 更多