如何在 laravel 中请求 class 中使用 if/else

How to use if/else in request class in laravel

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

如何使用多个验证规则进行查询('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')?

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

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

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

注意你在rules()方法中return是一个普通的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);