【问题标题】:Laravel L5.5 dynamic request validation that depends on variable依赖于变量的 Laravel L5.5 动态请求验证
【发布时间】:2018-06-16 13:51:25
【问题描述】:

在我的控制器中,我有类似的东西:

switch ($type)
    {
        case '1':
            $validation_rules = [
                'a' => 'required',
                'b' => 'required',];
            break;
        case '2':
            $validation_rules = [
                'd' => 'required',
                'j' => 'nullable|numeric',];
            break;
        case '3':
            $validation_rules = [
                't1.x' => 'required|numeric',
                't1.y' => 'required|numeric',];
            break;
    }

$request->validate($validation_rules);

但我不喜欢这样,因为它会占用我的控制器。 我正在寻找一种使用请求验证的方法。

类似的东西是我的目标:

public function store(XXRequest $request)

并将验证的逻辑放在里面。

【问题讨论】:

  • 如何在控制器中获取 $type 的值??

标签: php laravel validation laravel-5


【解决方案1】:

创建一个新的请求文件:

php artisan make:request SomeRequest

将逻辑放入rules()方法中:

public function rules()
{
    switch ($this->type)
        {
            case '1':
                $validation_rules = [
                    'a' => 'required',
                    'b' => 'required',];
                break;
            case '2':
                $validation_rules = [
                    'd' => 'required',
                    'j' => 'nullable|numeric',];
                break;
            case '3':
                $validation_rules = [
                    't1.x' => 'required|numeric',
                    't1.y' => 'required|numeric',];
                break;
        }

    return $validation_rules;
}

然后使用它:

public function store(SomeRequest $request)

https://laravel.com/docs/5.5/validation#form-request-validation

【讨论】:

  • 谢谢,但是如何将 $type 变量传递给 rules() ?
  • @titonior 如果它是一个 get 参数或一个表单元素,您可以使用 request() 帮助器,正如我在更新的答案中所示。
  • 这正是我正在寻找的答案。显然是不知何故,但我没想到!非常感谢!
  • 你可以使用 $this->type
  • @dobs 已编辑。在这种情况下,最好在内部使用$this->type。谢谢。
猜你喜欢
  • 2018-02-11
  • 2017-07-15
  • 1970-01-01
  • 1970-01-01
  • 2017-11-21
  • 2020-01-13
  • 1970-01-01
  • 2014-04-07
  • 1970-01-01
相关资源
最近更新 更多