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.

Не в сети

#4 10.09.2021 07:25:31

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

Sometime the user need to fill multiple fields in form, also each of them must ... demonstrates the implementation when all email fields use the same names.

NJMCDirect

Не в сети

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