vistas switch plantillas para index gratis ejemplo descargar php laravel laravel-4

php - switch - variables en blade laravel



Laravel''s Blade: ¿cómo puedo establecer las variables en una plantilla? (25)

Estoy leyendo los documentos de templating Laravel Blade y no puedo encontrar cómo puedo asignar variables dentro de una plantilla para utilizarlas más adelante en la plantilla. No puedo hacer {{ $old_section = "whatever" }} porque eso hará eco de "lo que sea" y no quiero eso.

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

¿Hay alguna manera elegante de hacer eso en Blade?


Asignar variable a la plantilla de hoja, estas son las soluciones

Podemos usar la etiqueta <?php ?> En la página de la cuchilla

<?php $var = ''test''; ?> {{ $var }

O

Podemos usar el comentario blade con sintaxis especial

{{--*/ $var = ''test'' /*--}} {{ $var }}


Desde Laravel 5.2.23, tiene la directiva @php Blade , que puede usar en línea o como instrucción de bloque:

@php($old_section = "whatever")

o

@php $old_section = "whatever" @endphp


En cuanto a mi manera elegante es como la siguiente

{{ ''''; $old_section = "whatever"; }}

Y solo $old_section variable $old_section .

{{ $old_section }}


En laravel-4 , puede usar la sintaxis del comentario de la plantilla para definir / establecer variables.

La sintaxis de los comentarios es {{-- anything here is comment --}} y es renderizada por blade Engine como

<?php /* anything here is comment */ ?>

entonces con un pequeño truco podemos usarlo para definir variables, por ejemplo

{{-- */$i=0;/* --}}

será renderizado por blade como <?php /* */$i=0;/* */ ?> que establece la variable para nosotros. Sin cambiar ninguna línea de código.


En mi opinión, sería mejor mantener la lógica en el controlador y pasarla a la vista para usar. Esto puede hacerse de dos maneras usando el método ''View :: make''. Actualmente estoy usando Laravel 3, pero estoy bastante seguro de que es lo mismo en Laravel 4.

public function action_hello($userName) { return View::make(''hello'')->with(''name'', $userName); }

o

public function action_hello($first, $last) { $data = array( ''forename'' => $first, ''surname'' => $last ); return View::make(''hello'', $data); }

El método ''con'' es encadenable. Entonces usarías lo anterior como así:

<p>Hello {{$name}}</p>

Más información aquí:

http://three.laravel.com/docs/views

http://codehappy.daylerees.com/using-controllers


Es mejor practicar para definir variables en Controller y luego pasar a ver usando el método compact() o ->with() .

De lo contrario, #TLGreg dio la mejor respuesta.


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 a @yield{"key"} para mostrar el valor en otros lugares de su vista o de su hijo.


Existe 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 instrucción @if , en lugar de (por ejemplo) un operador como == .

@if ($variable = ''any data, be it string, variable or OOP'') @endif

Entonces puedes usarlo en cualquier lugar donde puedas usar cualquier otra variable

{{ $variable }}

El único inconveniente es que su tarea parecerá un error para alguien que no se da cuenta de que está haciendo esto como una solución alternativa.


Hay una muy buena extensión para Blade radic/blade-extensions . Después de agregarlo, puede usar @set (variable_name, variable_value)

@set(var, 33) {{$var}}


La piratería de comentarios no es una forma muy fácil de hacerlo. Además, los editores lo colorearán como un comentario y es posible que alguien lo pierda al consultar el código.

Pruebe algo como esto:

{{ ''''; $hello = ''world'' }}

Se compilará en:

<?php echo ''''; $hello = ''world''; ?>

... y hacer la tarea y no hacer eco de nada.


No creo que pueda hacerlo, pero, de nuevo, este tipo de lógica probablemente debería manejarse en su controlador y pasar a la vista ya configurada.


Puede establecer una variable en el archivo de vista, pero se imprimirá tal como lo configuró. De todos modos, hay una solución. Puede establecer la variable dentro de una sección no utilizada. Ejemplo:

@section {{ $yourVar = ''Your value'' }} @endsection

Entonces {{ $yourVar }} imprimirá Your value donde quieras, pero no obtendrás el resultado cuando guardes la variable.


Puede establecer variables en el motor de plantillas Blade de las siguientes maneras:

1. Bloque PHP general
Variable de configuración: <?php $hello = "Hello World!"; ?> <?php $hello = "Hello World!"; ?>
Salida: {{$hello}}

2. Bloque PHP Blade
Variable de configuración: @php $hello = "Hello World!"; @endphp @php $hello = "Hello World!"; @endphp
Salida: {{$hello}}


Puede usar el paquete que he publicado: https://github.com/sineld/bladeset

Luego puedes configurar fácilmente tu variable:

@set(''myVariable'', $existing_variable) // or @set("myVariable", "Hello, World!")


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

<?php /** * <code> * {? $old_section = "whatever" ?} * </code> */ Blade::extend(function($value) { return preg_replace(''//{/?(.+)/?/}/'', ''<?php ${1} ?>'', $value); });


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 determinada vista, 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 la configuración de variables dentro de una vista con blade.

View::composer(array(''AdminViewPath'', ''LoginView/subview''), function($view) { $view->with(array(''bodyClass'' => ''admin'')); });


Voy a extender la respuesta dada por @Pim.

Agregue esto al método de arranque de su AppServiceProvider

<?php /* |-------------------------------------------------------------------------- | Extend blade so we can define a variable | <code> | @set(name, value) | </code> |-------------------------------------------------------------------------- */ Blade::directive(''set'', function($expression) { list($name, $val) = explode('','', $expression); return "<?php {$name} = {$val}; ?>"; });

De esta forma no expones la capacidad de escribir ninguna expresión php.

Puede usar esta directiva como:

@set($var, 10) @set($var2, ''some string'')


Y de repente nada aparecerá. Desde mi experiencia, si tienes que hacer algo como esto, prepara el html en el método de un modelo o reorganiza tu código en matrices o algo así.

Nunca hay solo 1 camino

{{ $x = 1 ? '''' : '''' }}


Ya lo harás muy complicado.

Solo usa php simple

<?php $i = 1; ?> {{$i}}

donesies.

(o https://github.com/alexdover/blade-set ve bastante directo también)

Todos estamos "pirateando" el sistema configurando variables en vistas, entonces, ¿por qué hacer que el "truco" sea más complicado de lo necesario?

Probado en Laravel 4.

Otro beneficio es que el resaltado de sintaxis funciona correctamente (estaba usando el hack de comentarios antes y era horrible de leer)


funciona en todas las versiones de blade.

{{--*/ $optionsArray = [''A'', ''B'', ''C'', ''D'',''E'',''F'',''G'',''H'',''J'',''K''] /*--}}


laravel 5 puedes hacer esto fácilmente. vea abajo

{{--*/ @$variable_name = ''value'' /*--}}


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 ).

Solo agregue lo siguiente en la aplicación / controladores / BaseController.php

class BaseController extends Controller { public function __construct() { // Share a var with all views View::share(''myvar'', ''some value''); } }

y ahora $myvar estará disponible para todas sus visitas, incluida su plantilla.

Lo usé para establecer URL de activos específicos del entorno para mis imágenes.


En Laravel 5.1, 5.2 :

https://laravel.com/docs/5.2/views#sharing-data-with-all-views

Es posible que necesite compartir un dato con todas las vistas que su aplicación le brinda. Puede hacerlo utilizando el método de compartir de fábrica de vista. Por lo general, debe realizar llamadas para compartir en el método de inicio de un proveedor de servicios. Usted es libre de agregarlos al AppServiceProvider o generar un proveedor de servicios separado para alojarlos.

Editar archivo: /app/Providers/AppServiceProvider.php

<?php namespace App/Providers; class AppServiceProvider extends ServiceProvider { public function boot() { view()->share(''key'', ''value''); } public function register() { // ... } }


LARAVEL 5.2 Y ARRIBA

Puedes simplemente usar:

@php ($i = 1)

O puede usarlo en una declaración de bloque:

@php $i = 1 @endphp

LARAVEL 5

Extienda Blade así:

/* |-------------------------------------------------------------------------- | 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 flojo, simplemente ponga el código en la función boot () de AppServiceProvider.php.

Solución más sencilla: cree un proveedor de servicios propio. Consulte https://.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 Providers :)

LARAVEL 4

Puedes poner el código anterior en la parte inferior de la aplicación / start / global.php (o en cualquier otro lugar si crees que es mejor).

Después de los cambios anteriores, puede usar:

@define $i = 1

para definir una variable.


Si tienes PHP 7.0:

La forma más simple y efectiva es con la asignación entre corchetes .

La regla es simple: ¿usa su variable más de una vez? Luego, declare que es la primera vez que se usa entre paréntesis, mantenga la calma y continúe.

@if(($users = User::all())->count()) @foreach($users as $user) {{ $user->name }} @endforeach @else There are no users. @endif

Y sí, sé sobre @forelse , esto es solo una demostración.

Dado que sus variables ahora se declaran como y cuando se utilizan, no hay necesidad de ninguna solución alternativa de blade.