Каков наилучший способ / наилучшая практика обработки логического значения в классе запросов Laravel 8?

#laravel #eloquent #request #laravel-8

Вопрос:

У меня есть несколько стандартных одиночных флажков, которые определяют определенное логическое значение, т. Е. is_active

  <label class="form-check-label text-google">
   <input type="checkbox" name="is_active" id="is_active" value="1" class="form-check-input"
      @if (old('is_active') == '1' || (empty(old()) amp;amp; $doctor->is_active == 1)) checked @endif>
      {{ __('Doctor activated') }}
      <i class="input-helper"></i>
 </label>
 

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

   /**
  * Get the validation rules that apply to the request.
  *
  * @return array
  */
  public function rules()
 {
   $this->request->set("is_active", $this->request->has("is_active"));

   return [ ...
 

Я также привел свойство is_active в модели в качестве логического значения.
Что здесь является лучшей практикой? Я не мог найти ничего, что вело бы меня в правильном направлении…

Заранее спасибо.

Комментарии:

1. Ваш вопрос не настолько ясен. Насколько я могу видеть, у вас установлено is_active свойство формы 1 , и затем вы хотите переопределить это значение в объекте запроса перед проверкой, это то, что вы пытаетесь?

2. Да, это в значительной степени то, чего я хочу достичь

Ответ №1:

Поскольку вы хотите коснуться запроса до проверки, вы можете использовать этот метод: prepareForValidation() :

Подготовка Входных Данных Для Проверки

Если вам необходимо подготовить или очистить какие-либо данные из запроса, прежде чем применять правила проверки, вы можете использовать метод prepareForValidation:

 use IlluminateSupportStr;

/**
 * Prepare the data for validation.
 *
 * @return void
 */
protected function prepareForValidation()
{
    $this->merge([
        'slug' => Str::slug($this->slug),
    ]);
}
 

Так что в вашем случае вы можете сделать:

 public function prepareForValidation()
{
    $this->merge([
        'is_active' => $this->request->has('is_active')),
    ]);
}
 

Комментарии:

1. Это здорово, этот метод prepareForValidation -то, что я искал… Однако ваше примечание не решает проблему, так как флажок не отправляет никакого значения при снятии, и мне нужно значение false снятого флажка

Ответ №2:

как я читал, вы хотите знать, есть ли значение или нет, на самом деле я думаю, что вы можете использовать filled функцию запроса класса.