web-dev-qa-db-fra.com

Laravel attribut de rendement

J'essaie de définir un attribut en utilisant @yield et @section , mais comment? J'ai essayé d'utiliser

<html @yield('mainApp')>

et

@section('mainApp','id="myid"')

mais il retourne id = & quot; myid & quot; au lieu de id = "myid"

Je sais que je peux le gérer avec un id par défaut mais je n'aime pas cette façon, et aussi si je dois utiliser un attribut personnalisé?

23
Vixed

Laravel échappe au HTML par défaut. Je vois donc que vous avez deux choix.

  1. Exposez la valeur à la vue sous forme de variable dans votre contrôleur.

    view()->share('mainApp', sprintf('id="%s"', 'myid'));

Puis, affichez la valeur non échappée. 

<html {!! $mainApp !!}
  1. Ne donnez que la valeur de l'attribut id, pas l'attribut entier.

    @section('mainApp') myid @stop

    <html id="@yield('mainApp', '')">

12
fubar

Si vous consultez le Guide de mise à niveau à partir du lien ci-dessous, vous verrez quelques lignes sous Lame: https://laravel.com/docs/5.4/upgrade

    @section Escaping

Dans Laravel 5.4, le contenu en ligne transmis à une section est automatiquement échappé:

    @section('title', $content)

Si vous souhaitez afficher du contenu non masqué dans une section, vous devez déclarer la section en utilisant le style traditionnel "forme longue":

    @section('title')
        {!! $content !!}
    @stop

Donc, pour obtenir le résultat de votre requête, vous devez procéder comme suit:

    @section('mainApp', {!! 'id="myid"' !!})
7
Prashant Barve

Sur votre contrôleur, vous faites quelque chose comme:

return view('my_page')->with('myid', 'myid');

et sur votre vue/mise en page, vous faites quelque chose comme:

<html {{ $myid or '' }}>
...

Vous n'avez pas besoin de céder pour une telle tâche.

7
Waiyl Karim

Pourquoi n'utilisez-vous pas comme ça:

@section('mainApp') id='myid' @endsection

Cela n'échappera pas au personnage.

4
Manish

Quelle version de Laravel vous utilisez? Dans le Laravel 5.4, il y a une mise à jour à ce sujet:

Lame

@section s'échappant

Dans Laravel 5.4, le contenu en ligne transmis à une section est automatiquement échappé :

@section ('title', $ content) 

Si vous souhaitez rendre le contenu non échappé de Dans une section, vous devez déclarer la section en utilisant le style traditionnel "forme longue" de :

@section titre') {!! $ content !!} @stop

https://laravel.com/docs/5.4/upgrade

Longue histoire, essayez d'utiliser Laravel 5.4 puis utilisez ce code

@section('mainApp')
    id="myid"
@stop
3
Alief

Donc, un meilleur moyen de le faire si je vous comprends bien, utilise @stack et @Push

<html class="no-js" lang="en" @stack('mainApp')>

Et quelle que soit la page que vous souhaitiez envoyer, utilisez @Push

@Push('mainApp')
 id='myid'
@endpush

https://laravel.com/docs/5.2/blade#stacks

peut même ajouter des variables ou tout ce que vous aimez là-bas et il ira où le @stack est

2
rchatburn

si utilisé Laravel 5.4, le contenu en ligne transmis à une section est automatiquement échappé. 

puis retirez automatiquement échappé dans la section pour utilisé 

@section('mainApp', {!! 'id="myid"' !!})
2
swaroop suthar

Peut-être que quelque chose comme ceci aiderait:

{!! $__env->yieldContent('mainApp') !!}

Cela dit, en utilisant laravel 5.4, votre façon de faire fonctionne bien pour moi .. quelle version utilisez-vous?

2
Nic Gutierrez

Le contenu par défaut de la section est échappé à l'aide de l'assistant e(). Depuis Laravel 5.1, vous pouvez utiliser Illuminate\Support\HtmlString, cette classe html content c'est non échappé mais rendu directement par le Laravel e() fonction d'assistance, c'est-à-dire:

@section('mainApp', new Illuminate\Support\HtmlString('id="myid"'))
2
dparoli

Définissez votre mise en page principale avec @yield

<html lang="{{ config('app.locale') }}" @yield('hello')>

Étendre ce maître

@extends('layouts.app')

Commencer la section bonjour 

@section('hello') 
   id="myId"
@endsection

La sortie de ce qui suit est comme ceci ici id = "myId" est une partie dynamique.

<html id="myId" lang="en">
0
Webinion

Si vous voulez atteindre <html id="myid"> vous pouvez le faire de cette façon:

dans votre tag html, ajoutez ceci:

<html @yield('mainApp')>

et dans votre modèle:

@section('mainApp', "id=myid") // this will give you <html id="myid">

 enter image description here

0
Amr Aly

Je ne sais pas comment vous attribuez la valeur de myId, mais s'il ne s'agit que d'une variable PHP, avez-vous essayé de la transmettre à vos partiels comme ceci?

@yield('mainApp', [
    'id' => $myid
])

@section('mainApp', [
    'id' => $myid
])

Vous devriez pouvoir passer toutes les variables d'un modèle à un autre et les mapper avec des noms de variables distincts à l'aide d'un tableau associatif de paires clé => valeur.

0
Spholt

Il existe une classe HtmlString que vous pouvez utiliser pour ce type de choses, Laravel l'utilise pour des fonctions telles que csrf_field() et method_field().

Vous pouvez l'ajouter si vous le souhaitez:

@section('mainApp', new \Illuminate\Support\HtmlString('id="myid"'))

Cependant, je créerais personnellement un assistant personnalisé pour pouvoir y accéder beaucoup plus facilement, à savoir:

@section('mainApp', html_string('id="myid"'))

L'assistant devrait ressembler à quelque chose comme ..

function html_string($string) {
    return new \Illuminate\Support\HtmlString($string);
}

Si vous avez besoin d’aide pour créer un assistant personnalisé, consultez cette réponse https://stackoverflow.com/a/28290359/7844646

0
Saeed Prez

Je viens de le tester dans un laravel 5.4 et ce qui fonctionne pour moi est:

C'est dans ma mise en page

<html lang="en" @yield('mainApp')> 

Et ceci dans ma vue étendue (citations supprimées enveloppant myid)

@section('mainApp','id=myid')

Le résultat est dans l'image ci-jointe

 enter image description here

0
Frank Provost

Je n'ai pas essayé, mais vous pourriez peut-être faire quelque chose comme ça:

<html {!! View::getSections()['mainApp'] !!}>

Si j'ai raison, View::getSections() renvoie toutes les sections définies.

Cependant, je ne sais pas si cela fonctionnera, car peut-être que getSections sera appelée avant que la section ne soit définie. Mais ça vaut toujours le coup.

0
Alex van Vliet

Voici comment je fais cela dans Laravel 5.4:

Modèle HTML (template.html):

<!DOCTYPE html>
<html id="{{ $html_id or '' }}" lang="{{ $html_locale or 'en' }}">
    <head>
        ...

        @yield('head')

        ...
    </head>

    <body>
        ...

        @yield('body')

        ...
    </body>
</html>

Un modèle de base (template.main)

@component('template.html')
    @section('head')

       ...

    @stop


    @section('body')
        ...

        @yield('contents')

        ...
    @stop
@endcomponent

Un modèle de page qui définira le HTML #ID

@extends('template.main')


@slot('html_id')
    app-html-id
@endslot


@section('contents')
  ... 
@stop
0