【问题标题】:How to use if/else in request class in laravel如何在 laravel 的请求类中使用 if/else
【发布时间】:2020-11-30 08:07:18
【问题描述】:

我只使用一个页面来“创建广告页面”。

如何使用多个验证规则进行查询('type')?
ads.blade.php

@if ($request->query('type') == 'text')

   //fields

@elseif($request->query('type') == 'post')

   //fields

@elseif($request->query('type') == 'banner')

   //fields

@endif

AdsRequest.php

public function rules(Request $request)
{

    //this if not work. how to resolve?

    if ($request->query('type') == 'text'){
        return [
            'title'  => ['required','max:255', Rule::unique('ads')->ignore($this->route('ad'))],
            'url' => 'required',
            'type' => 'required|in:text,banner,post,sidebar',
            'status' => 'nullable',
            'btn' => 'nullable',
            'pic' => 'nullable',
            'description' => 'required',
        ];
    }
}

查询('type')如何使用多个验证规则?

【问题讨论】:

标签: php laravel laravel-validation


【解决方案1】:

在请求类中,可以通过all()方法访问接收到的数据。

$data = $this->all();
$type = isset($data['type'])? $data['type'] : null;

switch($type) {
     case "text": 
        return [
           'url' => 'required'
        ]
}

请注意,您在rules() 方法中返回的是一个普通的PHP 数组,它可以是不同数组的合并。您可能有一些与 type 字段无关的规则。

$commonRules = [
   'title' => 'required',
   'email' => 'required|email',
];
$specificRules = [];

$data = $this->all();
$type = isset($data['type'])? $data['type'] : null;

switch($type) {
     case "text": 
        $specificRules = [
           'url' => 'required',
        ];
        break;

     case "foo":
        $specificRules = [
            'btn' => 'nullable',
        ];
        break;
}

return array_merge($commonRules, $specificRules);

【讨论】:

    猜你喜欢
    • 2021-06-02
    • 2016-03-01
    • 1970-01-01
    • 2015-02-14
    • 1970-01-01
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多