344 votes

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

Je suis en train de lire Laravel de la Lame de template docs et je ne trouve pas comment je peux attribuer 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 se fera l'écho de "quelque chose", et je n'en veux pas.

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

Est-il une manière élégante de faire de la Lame?

492voto

Pim Points 157

Vieille question, mais je pense que je l'ai résolu en une manière élégante. J'ai étendu la Lame comme ceci:

/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @define $variable = "whatever"
| </code>
|--------------------------------------------------------------------------
*/

Blade::extend(function($value) {
    return preg_replace('/\@define(.+)/', '<?php ${1}; ?>', $value);
});

Vous pouvez juste mettre le code ci-dessus sur le fond de app/start/global.php (ou tout autre lieu si vous pensez que c'est mieux).

Vous pouvez ensuite utiliser:

@define $i = 1

pour définir une variable.

137voto

TLGreg Points 2124

Il est fortement déconseillé de le faire en vue donc, il n'y a pas de lame de balise. Si vous voulez faire dans votre lame de vue, vous pouvez soit ouvrir une balise php comme vous l'avez écrit ou enregistrer une nouvelle lame de balise. Juste un exemple:

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

119voto

Trying Tobemyself Points 1751

Dans , vous pouvez utiliser le modèle de syntaxe pour les commentaires à définir et à définir des variables.

Commentaire syntaxe est - {{-- anything here is comment --}} et qu'il est rendu par moteur

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

donc avec un peu d'astuce on peut l'utiliser pour définir des variables, par exemple

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

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

62voto

BTMPL Points 191

Il existe une solution simple qui ne nécessite pas de modifier le code, et il travaille dans Laravel 4 tout aussi bien.

Il vous suffit d'utiliser l'opérateur d'affectation (=) dans l'expression passée à une @if déclaration, au lieu de (par exemple) un opérateur tel que ==.

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

Ensuite, vous pouvez l'utiliser partout où vous pouvez utiliser une autre variable

{{ $variable }}

Le seul inconvénient, c'est votre devoir sera de regarder comme une erreur à quelqu'un de ne pas conscient que vous êtes en train de faire cela comme une solution de contournement.

17voto

Justin Points 2493

Si vous vouliez la variable accessible dans tous vos points de vue, et pas seulement votre modèle, View::share est une bonne méthode (plus d'infos sur ce blog).

Il suffit d'ajouter le texte suivant dans app/controllers/BaseController.php

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

et maintenant, $myvar sera disponible pour tous vos points de vue, incluant votre modèle.

J'ai utilisé cette fonction pour définir l'environnement spécifique de l'actif Url pour mes images.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X