Error el intentar pasar parámetros en @include de laravel (5.3)

publicado por: Anonymous

Paso parámetros de la siguiente manera y me funciona:

<?php 
    $datos = array('ruta' => '30',);
?>
@include('componentes.boton_listado_crear', $datos)

En el archivo que recibo la informacion lo hago de la siguiente manera:

<button type="button" id="Crear" class="btn btn-primary">
    <span class="fa fa-plus"></span>
    <span class="hidden-xs"> Agregar</span>
</button>
<script type="text/javascript">
    var ruta = '{{ $datos['ruta'] }}';
    var funcion = 'crear';
    var id_perfiles = '{{ Auth::user()->id_perfiles }}';

    $.get("tablero/getValidCRUD/"+ruta+"/"+funcion+"/"+id_perfiles+"/",function(resp){
         $("#Crear").attr("disabled", !resp.results);
    });
</script>

De esa manera me funciona bien la información y lo que deseo mostrar en la vista.

Ahora voy con mi problema:

Intento pasar parámetros a una función, en el cual el @include sera retornado como un string. A continuación me explico con lo que llevo hasta ahora:

Llamo la función:

ButtonEditar('30')

Acá la función que estoy llamando:

function ButtonEditar(valor){
    <?php 
        $datos = array('ruta' => valor,);
    ?>
    return '@include('componentes.boton_listado_editar', $datos)';
}

Esto me genera el siguiente error:

introducir la descripción de la imagen aquí

Actualización 1:

Gracias al usuario @MáximaAlekz me aclaro un error bobo que estaba cometiendo:

function ButtonEditar(valor){
    $datos = {ruta: $valor};
    return '@include('componentes.boton_listado_editar', $datos)'; 
}

2

El contenido del archivo al cual llamo con el include, es el siguiente:

<button type="button" class="editar edit-modal btn btn-warning ">
    <span class="fa fa-edit"></span>
    <span class="hidden-xs"> Editar</span>
</button>
<script type="text/javascript">
    var ruta = '{{ $datos['ruta'] }}';
    var funcion = 'crear';
    var id_perfiles = '{{ Auth::user()->id_perfiles }}';
</script>

solución

En general lo que intentas hacer no es una muy buena práctica o por lo menos yo no la recomendaría, hay varias razones:

  • Utilizar Blade (php) para retornar un string en JavaScript normalmente tendrá problemas con los "escapes".
  • Lo que hace el código implicado es como un doble return, uno en php y luego otro return en JavaScript, en el fondo es como si intentaras pasar de PHP a HTML usando a JavaScript como un puente. Simplemente no.
  • El código es poco reutilizable y las dependencias son muy altas.
  • El código es complicado de leer y entender, tal vez por el motivo anterior.
  • Blade no fue diseñado para eso, no es un API o similar.

Como siempre hay muchas opciones para resolver esto, pero voy a ilustrar las dos más sencillas y prácticas:

  1. Tal vez la mejor práctica sería hacer una solicitud AJAX, y que esta entregue el string deseado, con los valores y la vista adecuada, de hecho puede ser un $.get() similar al que utilizas en la parte inicial que muestras.

    Esto permitiría no solo aislar el código y evitar un poco la mezcla no deseada de backend / template engine / frontend, sino que haría más entendible, reutilizable y documentable el código, y cada parte implicada tendría una "única" función definida.

  2. Siempre que quieras "pasar" datos de PHP a JS, utiliza json_encode(), te va a ahorrar la gran mayoría de inconvenientes que puedas tener.

    Esta es la opción más simple, funciona y no tiene nada de malo usarla en la mayoría de los casos, es más una salida de emergencia en este problema puntual.

Respondido por: Anonymous

Leave a Reply

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