Cómo establecer variables en una plantilla de hoja de Laravel

Resuelto duality_ asked hace 54 años • 31 respuestas

Estoy leyendo la documentación de Laravel Blade y no sé cómo asignar variables dentro de una plantilla para usarlas más adelante. No puedo hacerlo {{ $old_section = "whatever" }}porque eso hará eco de "lo que sea" y no quiero eso.

Entiendo que puedo hacerlo <?php $old_section = "whatever"; ?>, pero eso no es elegante.

¿Existe una manera mejor y elegante de hacerlo en una plantilla Blade?

duality_ avatar Jan 01 '70 08:01 duality_
Aceptado

CAMINO FÁCIL

Si desea definir varias variables, utilice la forma completa de la directiva blade:

@php
   $i = 1;
   $j = 2;
@endphp

Si sólo desea definir una variable, también puede utilizar una única declaración PHP:

@php($i = 1)

MÁS AVANZADO: AÑADIR UNA ETIQUETA 'DEFINIR'

Si desea utilizar etiquetas personalizadas y utilizar @define en lugar de @php, extienda Blade de esta manera:

/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @define $variable = "whatever"
| </code>
|--------------------------------------------------------------------------
*/

\Blade::extend(function($value) {
    return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);
});

Luego haga una de las siguientes cosas:

Solución rápida : si es vago, simplemente coloque el código en la función boot() de AppServiceProvider.php.

Mejor solución : crear un propio proveedor de servicios. Consulte https://stackoverflow.com/a/28641054/2169147 sobre cómo extender blade en Laravel 5. Es un poco más trabajo de esta manera, pero es un buen ejercicio sobre cómo usar proveedores :)

Después de los cambios anteriores, puede utilizar:

@define $i = 1

para definir una variable.

Pim avatar Sep 02 '2014 08:09 Pim

Se desaconseja hacerlo en una vista, ya que no hay una etiqueta de hoja para ello. Si desea hacer esto en su vista Blade, puede simplemente abrir una etiqueta php tal como la escribió o registrar una nueva etiqueta Blade. Sólo un ejemplo:

<?php
/**
 * <code>
 * {? $old_section = "whatever" ?}
 * </code>
 */
Blade::extend(function($value) {
    return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);
});
TLGreg avatar Oct 22 '2012 20:10 TLGreg