За последние 24 часа нас посетили 17977 программистов и 1582 робота. Сейчас ищут 1395 программистов ...

Валидация

Тема в разделе "Laravel", создана пользователем Dimon2x, 7 авг 2018.

  1. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Почему не переопределяется сообщение?

    PHP:
    1.  $rules = ['description' => 'min:4'];
    2.    
    3.     $messages = [
    4.         'description' => 'Поле :attribute должно содержать минимум :min символа.',
    5.      ];
    6.    
    7.     Validator::make(
    8.         $request->all(),
    9.         $rules ,
    10.         $messages
    11.           )->validate();
    Выводит стандартное

    • The description must be at least 4 characters.
     
  2. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Локализация делается через файлы локализации ну и как минимум
    "description" => ["min" => "Поле :attribute должно содержать минимум :min символа."],
    "description.min" => "Поле :attribute должно содержать минимум :min символа."
    --- Добавлено ---
    https://github.com/caouecs/Laravel-lang
    https://laravel.com/docs/5.6/localization
     
    Dimon2x нравится это.
  3. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Правильным ли способом вывожу ошибку для конкретного поля?

    Если нет, то каким надо?


    PHP:
    1. $rules = ['description' => 'min:4'];
    2.    
    3.     $messages = [
    4.         'min' => 'Название должно содержать минимум :min символа.',
    5.      ];
    6.    
    7.     Validator::make(
    8.         $request->all(),
    9.         $rules ,
    10.         $messages
    11.           )->validate();
    PHP:
    1. <form action="store" method="post" enctype="multipart/form-data">
    2.     {{csrf_field()}}
    3.     <input type="file" name="image">
    4.     <br>
    5.     <br>
    6.    
    7.      @if ($errors->has('description'))
    8.       <?php
    9.         echo $errors->get('description')[0];
    10.       ?>
    11.      @endif
    12.    
    13.       <br>
    14.     <input type="text" name="description" value="{{ old('description') }}">
    15.     <br>
    16.     <br>
    17.     <input type="submit">
    18. </form>
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    1. Устанавливаешь пакет https://github.com/caouecs/Laravel-lang
    2. Переключаешь язык или в конфиге или app()->setLocale('ru');
    3. $request->validate(['description'=>'min:4'])
    4. Готово.

    1 строчка кода)
     
  5. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    @nospiou лишняя зависимость
     
  6. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    Это не зависимость. Это просто перевод. Можешь вручную только скачать русский
    https://github.com/caouecs/Laravel-lang/tree/master/src/ru
    или так
    Код (Text):
    1. svn export https://github.com/caouecs/Laravel-lang/trunk/src/ru resources/lang/ru
     
  7. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761
    Неправильный формат у массива с сообщениями, скорее всего не указано, к какому правилу относится сообщение об ошибке. Ключ должен быть description.min, как можно догадаться из доки (прямо про метод make там не написано, но при описании замены сообщений об ошибках в классах реквестов именно такой формат)
     
  8. Dimon2x

    Dimon2x Старожил

    С нами с:
    26 фев 2012
    Сообщения:
    2.210
    Симпатии:
    185
    Как сделать проверку, что бы это был массив и в нём должны быть только цифры?

    PHP:
    1. <select multiple size="10" name="choose-category[]">
    2.                      <option value="none">Невыбрано</option>
    3.                    
    4.                       @foreach($category as $cat)
    5.                         <option value="{{$cat->id}}">{{$cat->name}}</option>
    6.                       @endforeach
    7.  
    8.                  </select>
    PHP:
    1. 'choose-category' => 'array|in_array:numeric'
    --- Добавлено ---
    Решил сделать так, пойдёт?

    PHP:
    1. 'choose-category' => 'array|required'
    --- Добавлено ---
    Не не пойдёт, значение none проходит валидацию, а проходить оно должно
    --- Добавлено ---
    Решил вообще убрать

    HTML:
    1. <option value="none">Не выбрано</option>
    И работает, как надо
     
  9. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.583
    Симпатии:
    1.761