Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 25.09.2020 02:28:11

Валидация большого количества одинаковых полей

Добрый день, есть форма, в которой по кнопке создаются дополнительные поля, этих полей можно создать неограниченное количество и каждое поле необходимо проверить на длину текста.
В контроллер данные передаются через Request файл, в данный момент это безобразие в request файле выглядит так:

public function rules()
    {
        return [            
            'question-img-1' => 'image|mimes:jpeg,png,jpg,gif|size:2000',
            'question-title-1' => 'max:60',
            'question-desc-1' => 'max:300',
            'question-img-2' => 'image|mimes:jpeg,png,jpg,gif|size:2000',
            'question-title-2' => 'max:60',
            'question-desc-2' => 'max:300', 
            'question-img-3' => 'image|mimes:jpeg,png,jpg,gif|size:2000',
            'question-title-3' => 'max:60',
            'question-desc-3' => 'max:300',  
            'question-img-4' => 'image|mimes:jpeg,png,jpg,gif|size:2000',
            'question-title-4' => 'max:60',
            'question-desc-4' => 'max:300',  
            'question-img-5' => 'image|mimes:jpeg,png,jpg,gif|size:2000',
            'question-title-5' => 'max:60',
            'question-desc-5' => 'max:300',  
            'question-img-6' => 'image|mimes:jpeg,png,jpg,gif|size:2000',
            'question-title-6' => 'max:60',
            'question-desc-6' => 'max:300',  
            'question-img-7' => 'image|mimes:jpeg,png,jpg,gif|size:2000',
            'question-title-7' => 'max:60',
            'question-desc-7' => 'max:300',                      
        ];
    }
    public function attributes()
    {
        return[            
            'question-img-1' => 'question image', 
            'question-title-1' => 'question title',
            'question-desc-1' => 'question desc',
            'question-img-2' => 'question image', 
            'question-title-2' => 'question title',
            'question-desc-2' => 'question desc',
            'question-img-3' => 'question image', 
            'question-title-3' => 'question title',
            'question-desc-3' => 'question desc',
            'question-img-4' => 'question image', 
            'question-title-4' => 'question title',
            'question-desc-4' => 'question desc',
            'question-img-5' => 'question image', 
            'question-title-5' => 'question title',
            'question-desc-5' => 'question desc',
            'question-img-6' => 'question image', 
            'question-title-6' => 'question title',
            'question-desc-6' => 'question desc',
            'question-img-7' => 'question image', 
            'question-title-7' => 'question title',
            'question-desc-7' => 'question desc',
        ];
        
    }

Как-то можно сделать эту проверку без прописывания имени каждого поля, что-то типа 'question-desc*' => 'max:300'. Понимаю что можно в контроллере циклом через validator сделать это, а в request как?

Не в сети

#2 25.09.2020 09:37:17

Re: Валидация большого количества одинаковых полей

на фронте сделайте массив  questions в котором объекты с img и title
и тогда
questions.*.title => max:60
questions.*.img => image|mimes:jpeg,png,jpg,gif|size:2000

Не в сети

#3 25.09.2020 10:42:54

Re: Валидация большого количества одинаковых полей

если имена полей будут массивом, т.е. на фронте будут все иметь имя question-title[] и question-desc[] и на беке будут автоматически приводитсья к массив, то валидировать их можно как

[
'question-title'   => 'array',
'question-title.*' => 'string|max:60',
...

https://laravel.com/docs/8.x/validation … ing-arrays

Изменено artoodetoo (25.09.2020 10:44:10)


There are two hard things in computer science: cache invalidation, naming things, and off-by-one errors.

Не в сети

Подвал раздела