Llamada a función de controlador desde vista – Laravel

publicado por: Anonymous

Tengo una vista que me muestra los datos de un pedido.
Para finalizar el pedido tengo un botón de Paypal que, mediante script, se conecta y se hace el pago del pedido.
Lo que quiero es que si el pago se ha realizado correctamente, desde la vista llamar a una función del controlador que actualiza su estado y redirecciona al home de la aplicación.

He probado dentro del script hacer la llamada de la siguiente forma:

onAuthorize: function(data, actions) {
    return actions.payment.execute().then(function() {
           window.alert('Pago Completo!');
    <?php echo PedidoDetalleController::finalizar_pedido($idpedido);?>
});

Pero me da error diciendo que no encuentra la clase:

Class ‘PedidoDetalleController’ not found (View: C:TrastosyTesorostrastosresourcesviewspedidodetalleindex.blade.php)

Tengo en el fichero de rutas definida la ruta:

Route::get('finaliza_pedido/{id}', '[email protected]_pedido');

También estoy probando con ajax haciéndolo de la siguiente forma:

onAuthorize: function(data, actions) {
    return actions.payment.execute().then(function() {
           window.alert('Pago Completo!');

    $.ajax({
        url: "finaliza_pedido'",
        data: "id={{ $idpedido }}",
        dataType: "json",
        method: "GET"});
    });
}

Pero en este caso, se carga la vista, pulso el botón de Paypal, se registra el pago tanto para el comprador como para el vendedor, pero es como si no llamara a la función del controlador ya que no se actualiza el estado del pedido.

La función del controlador lo que hace es lo siguiente:

public function finalizar_pedido($id){
    DB::table('pedidos')
        ->where('idPEDIDOS',$id)
        ->update(['ESTADO' => 'T']);
    return Redirect::to('home');
}

¿Alguna idea de qué estoy haciendo mal o cómo puedo hacer esta llamada de la vista a la función del controlador?

solución

No puedes llamar a la controladora de la manera que lo hicistes con un echo, ya que esta es llamada solo cuando el router de laravel encuentra que tu ruta en el navegador coincide con la que configurastes en el archivo web.php de tu carpeta routes. Por tanto lo que tienes que hacer es redireccionar tu página hacia la ruta de esa acción desde javascript luego de que te devuelva el success Paypal. Es decir:

onAuthorize: function(data, actions) {
    return actions.payment.execute().then(function() {
       window.alert('Pago Completo!');

    document.location.replace("finaliza_pedido/{{ $idpedido }}");
}
Respondido por: Anonymous

Leave a Reply

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