Ресурс маршрута Laravel не может обновить значение

#php #laravel

#php #laravel

Вопрос:

Это одна из моих форм и извлекаемых значений из базы данных, которые были вставлены ранее :

 <form class="form-horizontal bordered-group" role="form" action="{{ route('invoice.update' , $invoice->id)}}" method="PUT" enctype="multipart/form-data">
        {{ csrf_field() }}
          <input name="_method" type="hidden" value="GET">

  <div class="form-group clear"></div>
  <div class="row">
  <div class="form-group form-inline">
    <label class="col-sm-4" >Subtotal: amp;nbsp;</label>
    <div class="input-group col-sm-6">
      <div class="input-group-addon">Tk.</div>
      <input name="subtotal" type="number" class="form-control" id="subTotal" value="{{ $invoice->subtotal}}" required>
    </div>
  </div>

  <div class="form-group form-inline">
    <label class="col-sm-4"><button type="button" id="total" class="btn btn-primary">Total</button></label>
    <div class="input-group col-sm-6">
      <div class="input-group-addon">Tk.</div>
      <input name="total" type="number" class="form-control" id="totalAmount" value="{{ $invoice->total}}" required>
    </div>
  </div>

    </div>
    </div>
    <div class="modal-footer no-border clear">
      <button type="button" class="btn btn-primary" data-dismiss="modal">Close</button>
      <button type="submit" class="btn btn-success">Update</button>
    </div>

</div>
  

И является одним из моих контроллеров :

 public function update($id)
{
    $invoice = Invoice::find($id);
    $invoice->subtotal = $request['subtotal'];
    $invoice->total = $request['total'];
    $invoice->save();
    return redirect()->back()->with(['success' => 'Invoice Updtaed Successfully'] );
}
  

Как я могу решить мою проблему и обновить значение моей базы данных??

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

1. откуда берется ваш запрос $?

Ответ №1:

Измените код на:

 <form class="form-horizontal bordered-group" role="form" action="{{ route('invoice.update' , $invoice->id)}}" method="POST" enctype="multipart/form-data">
{{ csrf_field() }}
<input name="_method" type="hidden" value="Put">
  

Метод вашей формы всегда POST . _method входной элемент содержит HTTP-глаголы (Put, Delete и т. Д.).

Кроме того, вы должны ввести Request объект, чтобы заставить его работать:

 public function update(Request $request, $id)
  

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

1. Да, он работает, большое вам спасибо @Alexey Mezenin.

2. Выполнение $request[‘subtotal’] по запросу $request не может работать и приведет к: PHP Warning: ошибка Uncaught: невозможно использовать объект типа Request в качестве массива

3. @jakubwrona, вы можете получить доступ к свойствам с $request['subtotal'] помощью, $request->get('subtotal') или $request->subtotal .

4. Хорошо, вы оба правы, я понятия не имел, что это работает таким образом. Но я буду придерживаться своего get() 😉

Ответ №2:

Вы ссылаетесь на $request, но вы не передаете эту переменную, поэтому попробуйте:

 public function update(Request $request, $id)
{
    $invoice = Invoice::find($id);
    $invoice->subtotal = $request->get('subtotal');
    $invoice->total = $request->get('total');
    $invoice->save();
    return redirect()->back()->with(['success' => 'Invoice Updtaed Successfully'] );
}
  

Или создайте свой собственный класс запроса с правильной проверкой и ACL и передайте его экземпляр вашему методу обновления.

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

1. @NazmulHossain: вы получаете какую-либо ошибку, вы уверены, что update() был вызван? не могли бы вы поделиться своими определениями rotes?

2. спасибо за ваше внимание, теперь это решено @Jakub wrona.