Захватите все формданные с laravel livewire при изменении любого поля в форме - PullRequest
0 голосов
/ 27 апреля 2020

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

Если я использую обычные PHP и javascript, тогда мне придется каждый раз вручную ajax запрашивать и обновлять DOM с утомительными данными.

Мой блейд-код выглядит следующим образом

<tr>
<select wire:model="room_type" class="form-control input-sm">
    <option value="0">Select</option>
    @foreach($room_types as $type)
        <option value="{{$type->id}}">{{$type->room_type}}</option>
    @endforeach
</select>

<input type="number" min="1" value="1" wire:model="room_qty"  class="form-control input-sm">

<select name="mealPlan[]" wire:model="meal_plan"  class="form-control input-sm">
    <option value="0">Select</option>
    @foreach($meal_plans as $meal)
        <option value="{{$meal->id}}">{{$meal->meal_plan}}</option>
    @endforeach
</select>

<select name="adult_count[]" class="form-control input-sm" wire:model="adult" >
    <option value="1">1</option>
    <option value="1">2</option>
    <option value="1">3</option>
</select>
<select name="child_count[]" class="form-control input-sm" wire:model="child" >
    <option value="1">1</option>
    <option value="1">2</option>
    <option value="1">3</option>
</select>
<select name="infant_count[]" class="form-control input-sm" wire:model="infant" >
    <option value="1">1</option>
    <option value="1">2</option>
    <option value="1">3</option>
</select>
</tr>

Код компонента, как показано ниже

class BookingForm extends Component {

public $room_types = [];
public $meal_plan, $adult, $child, $infant;
public $room_row_count = 1;
public $net_total = 0.00;
public $discount = 0.00;
public $total_tax = 0.00;
public $gross_total = 0.00;

public function addRoomRow()
{
    $this->room_row_count++;
}

public function removeRoomRow()
{
    $this->room_row_count--;
}

public function calculate(Request $request) {

}

public function submit($formData) {

}

public function render()
{
    $meal_plans = MealPlan::all();
    $room_types = RoomType::all();
    return view('reservations.booking-form', [
        'room_types' => $room_types,
        'meal_plans' => $meal_plans
    ]);

}

Считайте, что это страница бронирования отеля backoffice, на которой персонал отеля хочет отправить клиенту предложение на несколько номеров с датой будущей регистрации заезда и отъезда, взрослый, количество детей зависит от наличия номеров на эти будущие даты. В настоящее время существуют номера различных типов, такие как тип A, тип B и т. Д., И эти номера имеют разные цены на разные даты, которые должны быть рассчитаны в бэкэнде вместе с налогом. Количество комнат вместе с типом комнаты может быть выбрано в форме, и результаты расчета должны быть отражены на странице одновременно.

Моя страница имеет эту форму с левой стороны, и справа отображается налоговые и другие расчеты, как только я выберу тип комнаты, количество комнат, количество взрослых или даты заезда. Я не уверен, должен ли я отправлять полные данные формы компоненту при изменении какого-либо поля и как этого достичь, или я должен отправить только измененное поле и выполнить вычисления. Основная задача - показать правильные расчеты и доступность на основе данных в базе данных на данный момент. Любая помощь будет оценена. Спасибо.

...