sirve - Atributo de rendimiento Laravel
para que sirve el yield laravel (17)
¿Por qué no usas así?
@section(''mainApp'') id=''myid'' @endsection
Esto no va a escapar del personaje.
Estoy tratando de establecer un atributo usando @yield y @section , pero ¿cómo? Traté de usar
<html @yield(''mainApp'')>
y
@section(''mainApp'',''id="myid"'')
pero devuelve id = & quot; myid & quot; en lugar de id = "myid"
Sé que puedo administrarlo con una identificación predeterminada, pero no me gusta de esta manera, ¿y si tengo que usar un atributo personalizado?
¿Qué versión de Laravel estás usando? En el Laravel 5.4, hay una actualización sobre esto:
Espada
Escapada @sección
En Laravel 5.4, el contenido en línea pasado a una sección se escapa automáticamente:
@section (''título'', $ contenido)
Si desea representar contenido sin escaparse en una sección, debe declarar la sección usando el estilo tradicional de "forma larga":
@sección de título'') {!! $ contenido!} @stop
https://laravel.com/docs/5.4/upgrade
Larga historia corta, intenta usar Laravel 5.4 y luego usa este código
@section(''mainApp'')
id="myid"
@stop
Así es como hago esto en Laravel 5.4:
Plantilla HTML (template.html):
<!DOCTYPE html>
<html id="{{ $html_id or '''' }}" lang="{{ $html_locale or ''en'' }}">
<head>
...
@yield(''head'')
...
</head>
<body>
...
@yield(''body'')
...
</body>
</html>
Una plantilla base (template.main)
@component(''template.html'')
@section(''head'')
...
@stop
@section(''body'')
...
@yield(''contents'')
...
@stop
@endcomponent
Una plantilla de página que definirá el #ID HTML
@extends(''template.main'')
@slot(''html_id'')
app-html-id
@endslot
@section(''contents'')
...
@stop
Así que una mejor manera de hacer esto si te entiendo es usando @stack y @push
<html class="no-js" lang="en" @stack(''mainApp'')>
Y cualquier página que quieras enviar, usa id @push
@push(''mainApp'')
id=''myid''
@endpush
https://laravel.com/docs/5.2/blade#stacks
Incluso puede agregar variables o lo que cada uno de sus gustos allí y que irá donde está el @stack
Déjame decirte en una línea.
El Nombre de la Sección de Inicio debe ser el rendimiento (''Nombre de la Sección'')
Define tu diseño maestro con @yield
<html lang="{{ config(''app.locale'') }}" @yield(''hello'')>
Extender ese maestro
@extends(''layouts.app'')
Inicio de la sección hola
@section(''hello'')
id="myId"
@endsection
La salida de los siguientes es como esto aquí id = "myId" es parte dinámica.
<html id="myId" lang="en">
El contenido predeterminado de la sección se escapa mediante la ayuda de e()
. Desde Laravel 5.1, puede usar Illuminate/Support/HtmlString
, este contenido html de clase no se escapa, sino que se representa directamente mediante la función auxiliar Laravel e()
, es decir:
@section(''mainApp'', new Illuminate/Support/HtmlString(''id="myid"''))
En tu controlador haces algo como:
return view(''my_page'')->with(''myid'', ''myid'');
y en tu vista / diseño haces algo como:
<html {{ $myid or '''' }}>
...
No necesitas rendirte para esa tarea.
Hay una clase HtmlString
que puedes usar para este tipo de cosas, Laravel la usa para cosas como csrf_field()
y method_field()
.
Usted podría en línea si lo desea:
@section(''mainApp'', new /Illuminate/Support/HtmlString(''id="myid"''))
Sin embargo, personalmente crearía un ayudante personalizado para esto, de modo que pueda acceder a él mucho más fácilmente, es decir:
@section(''mainApp'', html_string(''id="myid"''))
El ayudante debe verse algo así como ...
function html_string($string) {
return new /Illuminate/Support/HtmlString($string);
}
Si necesita ayuda para crear un ayudante personalizado, consulte esta respuesta https://.com/a/28290359/7844646
Laravel escapa de HTML por defecto. Por lo tanto veo que tienes dos opciones.
Exponga el valor a la vista como una variable en su controlador.
view()->share(''mainApp'', sprintf(''id="%s"'', ''myid''));
A continuación, generar el valor sin escapar.
<html {!! $mainApp !!}
Solo se obtiene el valor del atributo
id
, no el atributo completo.@section(''mainApp'') myid @stop
<html id="@yield(''mainApp'', '''')">
No estoy seguro de cómo está asignando el valor de myId
pero si es solo una variable de PHP, ¿ha intentado pasarlo a sus parciales de esta manera?
@yield(''mainApp'', [
''id'' => $myid
])
@section(''mainApp'', [
''id'' => $myid
])
Debería poder pasar cualquier variable de una plantilla a otra y asignarlas a distintos nombres de variables utilizando una matriz asociativa de pares clave => valor
No lo he probado, pero tal vez podrías hacer algo como esto:
<html {!! View::getSections()[''mainApp''] !!}>
Si tengo razón, View::getSections()
devuelve todas las secciones definidas.
Sin embargo, no sé si funcionará porque tal vez se llamará a getSections antes de definir la sección. Pero todavía vale la pena un tiro.
Si revisa la Guía de actualización en el enlace a continuación, verá algunas líneas debajo de Blade: https://laravel.com/docs/5.4/upgrade
@section Escaping
En Laravel 5.4, el contenido en línea pasado a una sección se escapa automáticamente:
@section(''title'', $content)
Si desea representar contenido sin escaparse en una sección, debe declarar la sección usando el estilo tradicional de "forma larga":
@section(''title'')
{!! $content !!}
@stop
Entonces, para obtener el resultado de la consulta que necesita, haga lo siguiente:
@section(''mainApp'', {!! ''id="myid"'' !!})
Tal vez algo como esto ayudaría:
{!! $__env->yieldContent(''mainApp'') !!}
Dicho esto, usando laravel 5.4, tu forma de trabajo funciona bien para mí ... ¿qué versión estás usando?
si se usa Laravel 5.4, el contenido en línea pasado a una sección se escapa automáticamente.
luego eliminar automáticamente escapó en la sección para usados
@section(''mainApp'', {!! ''id="myid"'' !!})