php template blade - Lame de Laravel: comment puis-je définir des variables dans un modèle?




13 Answers

Il est déconseillé de faire dans une vue, donc il n'y a pas d'étiquette de lame pour cela. Si vous voulez le faire dans votre vue lame, vous pouvez simplement ouvrir une balise php telle que vous l'avez écrite ou enregistrer une nouvelle balise lame. Juste un exemple:

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

Je lis les documents de modèle de Laravel Blade et je ne peux pas trouver comment je peux assigner des variables à l'intérieur d'un modèle pour une utilisation ultérieure dans le modèle. Je ne peux pas faire {{ $old_section = "whatever" }} parce que cela fera écho "quoi que" et je ne le veux pas.

Je vois que je peux faire <?php $old_section = "whatever"; ?> <?php $old_section = "whatever"; ?> , mais ce n'est pas élégant.

Existe-t-il une manière élégante de le faire dans Blade?




Dans laravel-4 , vous pouvez utiliser la syntaxe du commentaire de modèle pour définir / définir des variables.

La syntaxe du commentaire est {{-- anything here is comment --}} et elle est rendue par le moteur de la blade comme

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

donc avec petit tour, nous pouvons l'utiliser pour définir des variables, par exemple

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

sera rendu par blade comme <?php /* */$i=0;/* */ ?> qui définit la variable pour nous. Sans changer aucune ligne de code.




Tu vas le rendre trop compliqué.

Utilisez simplement php

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

dollars.

(ou https://github.com/alexdover/blade-set semble assez straighforward aussi)

Nous sommes tous un peu "piratage" du système en définissant des variables dans les vues, alors pourquoi rendre le "hack" plus compliqué alors il doit l'être?

Testé à Laravel 4.

Un autre avantage est que la mise en évidence de la syntaxe fonctionne correctement (j'utilisais le commentaire hack avant et c'était horrible à lire)




Depuis Laravel 5.2.23, vous avez la directive @php Blade , que vous pouvez utiliser en ligne ou en tant qu'instruction de bloc:

@php($old_section = "whatever")

ou

@php
    $old_section = "whatever"
@endphp



Et tout à coup rien n'apparaîtra. D'après mon expérience, si vous devez faire quelque chose comme ça, préparez le HTML dans la méthode d'un modèle ou faites une réorganisation de votre code dans des tableaux ou quelque chose comme ça.

Il n'y a jamais juste un chemin.

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



Dans Laravel 5.1, 5.2 :

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

Vous devrez peut-être partager un élément de données avec toutes les vues rendues par votre application. Vous pouvez le faire en utilisant la méthode de partage de la vue de l'usine. En général, vous devez placer des appels à partager dans la méthode de démarrage d'un fournisseur de services. Vous êtes libre de les ajouter à AppServiceProvider ou de générer un fournisseur de services distinct pour les héberger.

Editer le fichier: /app/Providers/AppServiceProvider.php

<?php

namespace App\Providers;

class AppServiceProvider extends ServiceProvider
{        
    public function boot()
    {
        view()->share('key', 'value');
    }

    public function register()
    {
        // ...
    }
}



Je ne pense pas que vous pouvez - mais encore une fois, ce genre de logique devrait probablement être géré dans votre contrôleur et passé dans la vue déjà définie.




Si vous avez PHP 7.0:

Le moyen le plus simple et le plus efficace est l'affectation entre parenthèses .

La règle est simple: utilisez-vous votre variable plus d'une fois? Puis déclarez-le la première fois qu'il est utilisé entre parenthèses, gardez votre calme et continuez.

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

Et oui, je sais @forelse , c'est juste une démo.

Puisque vos variables sont maintenant déclarées comme et quand elles sont utilisées, il n'y a pas besoin de solutions de contournement de lame.




Il est préférable de s'exercer à définir une variable dans le contrôleur, puis passer à l'affichage en utilisant la méthode compact() ou ->with() .

Sinon #TLGreg a donné la meilleure réponse.




laravel 5 vous pouvez facilement le faire. voir ci-dessous

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



Affecter une variable au modèle de lame, voici les solutions

Nous pouvons utiliser la <?php ?> Dans la page lame

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

OU

Nous pouvons utiliser le commentaire de la lame avec une syntaxe spéciale

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



J'ai eu une question similaire et trouvé ce que je pense être la bonne solution avec View Composers

View Composers vous permet de définir des variables à chaque fois qu'une vue particulière est appelée. Il peut s'agir de vues spécifiques ou de modèles de vue complets. Quoi qu'il en soit, je sais que ce n'est pas une réponse directe à la question (et 2 ans trop tard), mais cela semble une solution plus gracieuse que de définir des variables dans une vue avec lame.

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



Vous pouvez définir des variables dans le moteur de création de modèles de lames de la façon suivante:

1. Bloc PHP général
Réglage de la variable: <?php $hello = "Hello World!"; ?> <?php $hello = "Hello World!"; ?>
Sortie: {{$hello}}

2. Blade PHP Block
@php $hello = "Hello World!"; @endphp réglage: @php $hello = "Hello World!"; @endphp @php $hello = "Hello World!"; @endphp
Sortie: {{$hello}}




Related