¿Como corregir: ‘Creating default object from empty value’ en Laravel?

publicado por: Anonymous

En la blade tengo este codigo:

@foreach
<tr id="{{$employee->id}}">
<td class="visibleemployee">
<form action="{{route('admin.employees.cambiarVisible',$employee->id)}}">
  <button type="button" id="buttonchangevisible" data-id="{{$employee->id}}">
    @if ($employee->public == '1')
        <i class="fa fa-check" aria-hidden="true" id="margindataemployee" class="cambiarsiporno"></i>
    @else
        <i class="fa fa-times" aria-hidden="true" id="margindataemployee"></i>
    @endif
  </button>
  <input type="hidden" name="_token" value="{{Session::token()}}">
 </form>
 </td>
 </tr>

Al hacer clic en el botón, se ejecuta esta función con Ajax:

$("#buttonchangevisible").click(function(e){
        e.preventDefault();
        var button = $(this);
        var id = button.data('id');
        var formData = new FormData($(this)[0]);
        $.ajax({
            url:'employee/cambiarVisible/' + id,
            type: 'PUT',
            data: formData,
            success: function() {
                location.reload();
            },
            cache: false,
            contentType: false,
            processData: false
        });
        return false;
    });

Que llama al siguiente método del controlador:

public function cambiarVisible(Request $request, $id)
    {
        $employee = Worker::findOrFail($id);
        $employee->public = ($employee->public == 1) ? 0 : 1;
        $employee->save();
    }

Archivo rutas: (todo va dentro de un group que le añade el prefijo admin).

  Route::put('employee/cambiarVisible/{id}', ['uses' => '[email protected]', 'as' => 'admin.employees.cambiarVisible']);

El error citado en el titulo esta solucionado, ahora al hacer clic en la primera fila hace la llamada correctamente pero no hace el update del campo.
Al hacer clic en cualquier otra fila directamente no hace la llamada.

solución

Está mal puesta la ruta del código Ajax, no puedes usar rutas de laravel en js (’employee/cambiarVisible/{id}‘).
Si haces un “dd($id)” en el controlador veras que no te llega el valor, por lo que tendras que pasarlo por POST/PUT

Te dejo un ejemplo con el tipo delete (para PUT seria solo cambiar el _method de tipo delete a put)

function eliminar(ruta) {
 $.ajax({
                url: ruta,
                data: {'_method': 'delete', '_token': '{{Session::token()}}'},
                type: 'post',
                success: function () {
                    location.reload();
                },
                error: function () {
                    swal({
                        title: '¡¡ERROR!!',
                        type: 'error',
                        text: "No se pudo eliminar",
                        confirmButtonText: 'CONTINUAR',
                        showCancelButton: false
                    });
                }
            });
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *