Je lis la documentation de Laravel Blade et je n'arrive pas à comprendre comment affecter des variables à l'intérieur d'un modèle pour une utilisation ultérieure. Je ne peux pas le faire {{ $old_section = "whatever" }}
car cela fera écho à "quoi que ce soit" et je ne veux pas ça.
Je comprends que je peux le faire <?php $old_section = "whatever"; ?>
, mais ce n'est pas élégant.
Existe-t-il une meilleure façon élégante de le faire dans un modèle Blade?
php
laravel
laravel-4
laravel-blade
dualité_
la source
la source
<?php $old_section = "whatever"; ?>
. Je le trouve assez lisible.Réponses:
Il est déconseillé de le faire dans une vue donc il n'y a pas d'étiquette de lame pour cela. Si vous voulez le faire dans votre vue de lame, vous pouvez simplement ouvrir une balise php telle que vous l'avez écrite ou enregistrer une nouvelle balise de lame. Juste un exemple:
la source
{?
au lieu d'utiliser simplement le natif<?
?LARAVEL 5.5 ET PLUS
La directive lame @php n'accepte plus les balises en ligne. Utilisez plutôt la forme complète de la directive:
LARAVEL 5.2 ET PLUS
Vous pouvez simplement utiliser:
Ou vous pouvez l'utiliser dans une instruction de bloc:
LARAVEL 5
Étendez Blade comme ceci:
Effectuez ensuite l'une des opérations suivantes:
Solution rapide: si vous êtes paresseux, mettez simplement le code dans la fonction boot () de AppServiceProvider.php.
Solution plus agréable: créez votre propre fournisseur de services. Voir https://stackoverflow.com/a/28641054/2169147 sur la façon d'étendre la lame dans Laravel 5. C'est un peu plus de travail de cette façon, mais un bon exercice sur la façon d'utiliser les fournisseurs :)
LARAVEL 4
Vous pouvez simplement mettre le code ci-dessus au bas de app / start / global.php (ou tout autre endroit si vous pensez que c'est mieux).
Après les modifications ci-dessus, vous pouvez utiliser:
pour définir une variable.
la source
@php(@i = 1)
ou l'utiliser dans une instruction de bloc (fermer avec@endphp
)Dans laravel-4, vous pouvez utiliser la syntaxe de commentaire du modèle pour définir / définir des variables.
La syntaxe des commentaires est
{{-- anything here is comment --}}
et est rendue parlame moteur comme<?php /* anything here is comment */ ?>
donc avec peu de truc on peut l'utiliser pour définir des variables, par exemple
sera rendu par lamecomme
<?php /* */$i=0;/* */ ?>
qui définit la variable pour nous. Sans changer aucune ligne de code.la source
<?php $i=0; ?>
Il existe une solution de contournement simple qui ne vous oblige à modifier aucun code, et cela fonctionne aussi bien dans Laravel 4.
Vous utilisez simplement un opérateur d'affectation (
=
) dans l'expression passée à une@if
instruction, au lieu (par exemple) d'un opérateur tel que==
.Ensuite, vous pouvez l'utiliser n'importe où, vous pouvez utiliser n'importe quelle autre variable
Le seul inconvénient est que votre affectation ressemblera à une erreur pour quelqu'un qui ne sait pas que vous faites cela comme solution de contournement.
la source
Tu vas le rendre trop compliqué.
Utilisez simplement du php ordinaire
donesies.
(ou https://github.com/alexdover/blade-set semble également très simple)
Nous sommes tous un peu en train de "pirater" le système en définissant des variables dans les vues, alors pourquoi rendre le "piratage" plus compliqué qu'il ne doit l'être?
Testé à Laravel 4.
Un autre avantage est que la mise en évidence de la syntaxe fonctionne correctement (j'utilisais auparavant le hack de commentaires et c'était horrible à lire)
la source
Vous pouvez définir des variables dans le moteur de création de modèles de lame de la façon suivante:
1.
Variable générale de paramètre de bloc PHP :
<?php $hello = "Hello World!"; ?>
Sortie:
{{$hello}}
2.
Variable de paramètre de bloc PHP Blade :
@php $hello = "Hello World!"; @endphp
Sortie:
{{$hello}}
la source
Depuis Laravel 5.2.23, vous avez la directive @php Blade , que vous pouvez utiliser en ligne ou comme instruction de bloc:
ou
la source
Vous pouvez définir une variable dans le fichier de vue, mais elle sera imprimée telle que vous la définissez. Quoi qu'il en soit, il existe une solution de contournement. Vous pouvez définir la variable dans une section inutilisée. Exemple:
Ensuite ,
{{ $yourVar }}
imprimeraYour value
partout où vous le souhaitez, mais vous ne recevez pas la sortie lorsque vous enregistrez la variable.EDIT: nommer la section est obligatoire sinon une exception sera levée.
la source
Dans Laravel 4:
Si vous vouliez que la variable accessible dans toutes vos vues, pas seulement votre modèle,
View::share
soit une excellente méthode ( plus d'informations sur ce blog ).Ajoutez simplement ce qui suit dans app / controllers / BaseController.php
et
$myvar
sera désormais disponible pour toutes vos vues, y compris votre modèle.Je l'ai utilisé pour définir des URL d'actifs spécifiques à l'environnement pour mes images.
la source
Et soudain, rien n'apparaîtra. D'après mon expérience, si vous devez faire quelque chose comme ça, préparez le code HTML dans la méthode d'un modèle ou réorganisez votre code en tableaux ou quelque chose.
Il n'y a jamais qu'une seule façon.
la source
$users = ...
, mais quelque chose le long des lignes$css_class = ...
, donc strictement des variables de conception qui n'appartiennent pas au modèle ou au contrôleur, car elles sont déterminées par le concepteur.Je vais étendre la réponse donnée par @Pim.
Ajoutez ceci à la méthode de démarrage de votre AppServiceProvider
De cette façon, vous n'exposez pas la possibilité d'écrire une expression php.
Vous pouvez utiliser cette directive comme:
la source
Dans le document laravel https://laravel.com/docs/5.8/blade#php Vous pouvez procéder de cette façon:
la source
Dans Laravel 5.1, 5.2 :
https://laravel.com/docs/5.2/views#sharing-data-with-all-views
Modifier le fichier:
/app/Providers/AppServiceProvider.php
la source
Vous pouvez utiliser le package que j'ai publié: https://github.com/sineld/bladeset
Ensuite, vous définissez facilement votre variable:
la source
Quant à ma manière élégante est comme la suivante
Et faites simplement écho à votre
$old_section
variable.la source
Si vous avez PHP 7.0:
Le moyen le plus simple et le plus efficace consiste à attribuer des parenthèses à l'intérieur .
La règle est simple: utilisez-vous votre variable plusieurs fois? Déclarez-le ensuite la première fois qu'il est utilisé entre parenthèses, gardez votre calme et continuez.
Et oui, je sais
@forelse
, c'est juste une démo.Étant donné que vos variables sont désormais déclarées au fur et à mesure de leur utilisation, aucune solution de contournement n'est nécessaire.
la source
Je ne pense pas que vous puissiez - mais là encore, ce type de logique devrait probablement être géré dans votre contrôleur et transmis à la vue déjà définie.
la source
$previous_group_name
,$separator_printed
Etc.app/controllers/BaseController.php
.Attribuer une variable au modèle de lame, voici les solutions
Nous pouvons utiliser la
<?php ?>
balise dans la page de lameOU
Nous pouvons utiliser le commentaire de lame avec une syntaxe spéciale
la source
Le piratage des commentaires n'est pas une manière très lisible de le faire. Les éditeurs le colorieront également en tant que commentaire et quelqu'un pourrait le manquer en parcourant le code.
Essayez quelque chose comme ceci:
Il se compilera en:
... et faites le devoir et ne faites aucun écho.
la source
Il est préférable de s'entraîner à définir une variable dans le contrôleur, puis de passer à l'affichage en utilisant
compact()
ou->with()
méthode.Sinon, #TLGreg a donné la meilleure réponse.
la source
Il existe une très bonne extension pour les extensions radic / blade de Blade . Après l'avoir ajouté, vous pouvez utiliser @set (nom_variable, valeur_variable)
la source
Je cherchais un moyen d'attribuer une valeur à une clé et de l'utiliser plusieurs fois à mon avis. Dans ce cas, vous pouvez utiliser
@section{"key", "value"}
en premier lieu, puis appeler@yield{"key"}
pour afficher la valeur à d'autres endroits de votre vue ou de son enfant.la source
À mon avis, il serait préférable de conserver la logique dans le contrôleur et de la transmettre à la vue à utiliser. Cela peut être fait de deux manières en utilisant la méthode 'View :: make'. J'utilise actuellement Laravel 3 mais je suis sûr que c'est la même chose dans Laravel 4.
ou
La méthode «avec» est chaînable. Vous utiliseriez alors ce qui précède comme ceci:
Plus d'informations ici:
http://three.laravel.com/docs/views
http://codehappy.daylerees.com/using-controllers
la source
$format='Y-m-d H:i:s';
de cette façon, vous pouvez réutiliser ce format dans la vue. Cela n'appartient certainement pas au contrôleur. Cela dit, en réponse à la question ... Il n'y a rien de mal avec les<?php ?>
balises.J'avais une question similaire et j'ai trouvé ce que je pense être la bonne solution avec View Composers
Les compositeurs de vues vous permettent de définir des variables à chaque appel d'une certaine vue, et il peut s'agir de vues spécifiques ou de modèles de vues entiers. 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 être une solution plus gracieuse que de définir des variables dans une vue avec lame.
la source
laravel 5 vous pouvez facilement le faire. voir ci-dessous
la source
Vous pouvez étendre la lame en utilisant la méthode d'extension comme indiqué ci-dessous.
après cela, initialisez les variables comme suit.
la source
fonctionne dans toutes les versions de lame.
la source