Estoy leyendo la documentación de Laravel Blade y no puedo entender cómo asignar variables dentro de una plantilla para su uso posterior. No puedo hacerlo {{ $old_section = "whatever" }}
porque eso hará eco de "lo que sea" y no quiero eso.
Entiendo que puedo hacer <?php $old_section = "whatever"; ?>
, pero eso no es elegante.
¿Hay una manera mejor y elegante de hacer eso en una plantilla Blade?
php
laravel
laravel-4
laravel-blade
dualidad_
fuente
fuente
<?php $old_section = "whatever"; ?>
? Me parece bastante legible.Respuestas:
Se desaconseja hacerlo en una vista, por lo que no hay etiqueta de hoja para ello. Si desea hacer esto en su vista de Blade, puede abrir una etiqueta php tal como la escribió o registrar una nueva etiqueta Blade. Solo un ejemplo:
fuente
{?
lugar de solo usar el nativo<?
?LARAVEL 5.5 Y ARRIBA
La directiva de la hoja @php ya no acepta etiquetas en línea. En su lugar, use la forma completa de la directiva:
LARAVEL 5.2 Y ARRIBA
Solo puedes usar:
O puede usarlo en una declaración de bloque:
LARAVEL 5
Extiende Blade así:
Luego, realice una de las siguientes acciones:
Solución rápida: si eres flojo, solo coloca el código en la función boot () de AppServiceProvider.php.
Mejor solución: cree un proveedor de servicios propio. Vea https://stackoverflow.com/a/28641054/2169147 sobre cómo extender la cuchilla en Laravel 5. Es un poco más de trabajo de esta manera, pero un buen ejercicio sobre cómo usar Proveedores :)
LARAVEL 4
Simplemente puede poner el código anterior en la parte inferior de app / start / global.php (o en cualquier otro lugar si cree que es mejor).
Después de los cambios anteriores, puede usar:
para definir una variable
fuente
@php(@i = 1)
o usarlo en una declaración de bloque (cerrar con@endphp
)En laravel-4, puede usar la sintaxis de comentarios de plantilla para definir / establecer variables.
La sintaxis del comentario es
{{-- anything here is comment --}}
y la representaespada motor como<?php /* anything here is comment */ ?>
así que con un pequeño truco podemos usarlo para definir variables, por ejemplo
será prestado por espadacomo lo
<?php /* */$i=0;/* */ ?>
que establece la variable para nosotros. Sin cambiar ninguna línea de código.fuente
<?php $i=0; ?>
Hay una solución simple que no requiere que cambie ningún código, y también funciona en Laravel 4.
Simplemente usa un operador de asignación (
=
) en la expresión pasada a una@if
instrucción, en lugar de (por ejemplo) un operador como==
.Luego puede usarlo en cualquier lugar donde pueda usar cualquier otra variable
El único inconveniente es que su tarea parecerá un error para alguien que no sabe que está haciendo esto como una solución alternativa.
fuente
Lo harás demasiado complicado.
Solo usa PHP simple
donesies
(o https://github.com/alexdover/blade-set también se ve bastante directo)
Todos estamos "pirateando" el sistema configurando variables en las vistas, entonces, ¿por qué hacer que el "pirateo" sea más complicado de lo que debe ser?
Probado en Laravel 4.
Otro beneficio es que el resaltado de sintaxis funciona correctamente (estaba usando un hack de comentarios antes y fue horrible de leer)
fuente
Puede establecer variables en el motor de plantillas de Blade de las siguientes maneras:
1.
Variable general de configuración de bloques PHP :
<?php $hello = "Hello World!"; ?>
Salida:
{{$hello}}
2.
Variable de configuración de bloques Blade PHP :
@php $hello = "Hello World!"; @endphp
Salida:
{{$hello}}
fuente
Desde Laravel 5.2.23, tiene la directiva @php Blade , que puede usar en línea o como instrucción de bloque:
o
fuente
Puede establecer una variable en el archivo de vista, pero se imprimirá tal como la configuró. De todos modos, hay una solución alternativa. Puede establecer la variable dentro de una sección no utilizada. Ejemplo:
Luego
{{ $yourVar }}
imprimirá enYour value
cualquier lugar que desee, pero no obtendrá el resultado cuando guarde la variable.EDITAR: se requiere nombrar la sección; de lo contrario, se lanzará una excepción.
fuente
En Laravel 4:
Si desea que la variable sea accesible en todas sus vistas, no solo en su plantilla,
View::share
es un excelente método ( más información en este blog ).Simplemente agregue lo siguiente en app / controllers / BaseController.php
y ahora
$myvar
estará disponible para todas sus vistas, incluida su plantilla.Utilicé esto para establecer URL de activos específicos del entorno para mis imágenes.
fuente
Y de repente nada aparecerá. Según mi experiencia, si tiene que hacer algo como esto, prepare el html en el método de un modelo o reorganice su código en matrices o algo así.
Nunca hay solo 1 camino.
fuente
$users = ...
, sino algo similar$css_class = ...
, por lo que las variables de diseño estrictamente que no pertenecen al modelo o controlador, según lo determine el diseñador.Voy a extender la respuesta dada por @Pim.
Agregue esto al método de arranque de su AppServiceProvider
De esta manera no expones la capacidad de escribir ninguna expresión php.
Puede usar esta directiva como:
fuente
En el documento laravel https://laravel.com/docs/5.8/blade#php Puede hacerlo de esta manera:
fuente
En Laravel 5.1, 5.2 :
https://laravel.com/docs/5.2/views#sharing-data-with-all-views
Editar archivo:
/app/Providers/AppServiceProvider.php
fuente
Puede usar el paquete que he publicado: https://github.com/sineld/bladeset
Luego, configura fácilmente su variable:
fuente
En cuanto a mi forma elegante es como la siguiente
Y solo repite tu
$old_section
variable.fuente
Si tienes PHP 7.0:
La forma más simple y efectiva es con la asignación entre paréntesis .
La regla es simple: ¿usa su variable más de una vez? Luego declare la primera vez que se usa entre paréntesis, mantenga la calma y continúe.
Y sí, lo sé
@forelse
, esto es solo una demostración.Dado que sus variables ahora se declaran como y cuando se usan, no hay necesidad de ninguna solución alternativa.
fuente
No creo que pueda, pero, de nuevo, este tipo de lógica probablemente debería manejarse en su controlador y pasar a la vista ya configurada.
fuente
$previous_group_name
,$separator_printed
etc.app/controllers/BaseController.php
.Asignar variable a la plantilla de la cuchilla, aquí están las soluciones
Podemos usar la
<?php ?>
etiqueta en la página BladeO
Podemos usar el comentario de la hoja con una sintaxis especial
fuente
Hackear comentarios no es una forma muy legible de hacerlo. También los editores lo colorearán como un comentario y alguien puede pasarlo por alto al mirar el código.
Intenta algo como esto:
Se compilará en:
... y hacer la tarea y no hacer eco de nada.
fuente
Es mejor practicar para definir la variable en el controlador y luego pasar a la vista usando
compact()
o->with()
método.De lo contrario, #TLGreg dio la mejor respuesta.
fuente
Hay una muy buena extensión para Blade radic / blade-extensiones . Después de agregarlo, puede usar @set (variable_name, variable_value)
fuente
Estaba buscando una manera de asignar un valor a una clave y usarla muchas veces desde mi punto de vista. Para este caso, puede usar
@section{"key", "value"}
en primer lugar y luego llamar@yield{"key"}
para generar el valor en otros lugares en su vista o su hijo.fuente
En mi opinión, sería mejor mantener la lógica en el controlador y pasarla a la vista para usar. Esto se puede hacer de dos maneras usando el método 'View :: make'. Actualmente estoy usando Laravel 3, pero estoy bastante seguro de que es igual en Laravel 4.
o
El método 'con' es encadenable. Luego usarías lo anterior así:
Más información aquí:
http://three.laravel.com/docs/views
http://codehappy.daylerees.com/using-controllers
fuente
$format='Y-m-d H:i:s';
de esa manera puede reutilizar ese formato dentro de la vista. Esto ciertamente no pertenece al controlador. Dicho esto, en respuesta a la pregunta ... No hay nada malo con las<?php ?>
etiquetas.Tuve una pregunta similar y encontré lo que creo que es la solución correcta con View Composers
Los Compositores de vista le permiten establecer variables cada vez que se llama a una vista determinada, y pueden ser vistas específicas o plantillas de vista completas. De todos modos, sé que no es una respuesta directa a la pregunta (y 2 años demasiado tarde), pero parece una solución más elegante que establecer variables dentro de una vista con blade.
fuente
Laravel 5 puede hacer esto fácilmente. vea abajo
fuente
Puede extender la cuchilla utilizando el método extendido como se muestra a continuación.
después de eso inicialice las variables de la siguiente manera.
fuente
Funciona en todas las versiones de blade.
fuente