311

Laravel Bladeのドキュメントを読んでいますが、後で使用するためにテンプレート内で変数を割り当てる方法がわかりません。{{ $old_section = "whatever" }}それは「何でも」エコーするので、私はできません。私はそれを望んでいません。

できることは理解していますが<?php $old_section = "whatever"; ?>、それはエレガントではありません。

ブレードテンプレートでそれを行うためのより良い、エレガントな方法はありますか?

4

31 に答える 31

444

LARAVEL5.5以上

ブレードディレクティブの完全な形式を使用します。

@php
$i = 1
@endphp

LARAVEL 5.2-5.4

インラインタグを使用できます。

@php ($i = 1)

または、ブロックステートメントで使用できます。

@php
$i = 1
@endphp

「定義」タグを追加

カスタムタグを使用し、@ phpの代わりに@defineを使用する場合は、次のようにBladeを拡張します。

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

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

次に、次のいずれかを実行します。

簡単な解決策:怠惰な場合は、AppServiceProvider.phpのboot()関数にコードを配置するだけです。

より良い解決策:独自のサービスプロバイダーを作成します。Laravel 5でブレードを拡張する方法については、 https://stackoverflow.com/a/28641054/2169147を参照してください。この方法では少し手間がかかりますが、プロバイダーの使用方法については良い演習です:)

LARAVEL 4

上記のコードをapp/start / global.php(またはそれがより良いと感じる場合は他の場所)の下部に置くことができます。


上記の変更後、次を使用できます。

@define $i = 1

変数を定義します。

于 2014-09-02T08:19:27.817 に答える
136

ビューで行うことはお勧めしません。そのため、ブレードタグはありません。ブレードビューでこれを実行したい場合は、作成したとおりにphpタグを開くか、新しいブレードタグを登録することができます。ほんの一例:

<?php
/**
 * <code>
 * {? $old_section = "whatever" ?}
 * </code>
 */
Blade::extend(function($value) {
    return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);
});
于 2012-10-22T20:32:18.267 に答える
118

では、テンプレートコメント構文を使用して変数を定義/設定できます。

コメント構文は であり、エンジン{{-- anything here is comment --}}によって次のようにレンダリングされます。

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

少しのトリックで、たとえば変数を定義するためにそれを使用できます

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

変数を設定する によってレンダリングされます。<?php /* */$i=0;/* */ ?>コード行を変更せずに。

于 2013-06-18T19:05:11.337 に答える
58

コードを変更する必要のない簡単な回避策があり、Laravel4でも同様に機能します。

=ステートメントに渡される式では@if、(たとえば)のような演算子の代わりに、代入演算子()を使用するだけ==です。

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

その後、他の変数を使用できる場所ならどこでも使用できます

{{ $variable }}

唯一の欠点は、回避策としてこれを行っていることに気付いていない人にとっては、割り当てが間違いのように見えることです。

于 2013-05-30T13:06:22.970 に答える
35

Ya'llはそれを複雑にしすぎます。

プレーンphpを使用するだけ

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

ドニー。

(またはhttps://github.com/alexdover/blade-setもかなり単純に見えます)

私たちは皆、ビューに変数を設定することでシステムを「ハッキング」しているのですが、なぜ「ハッキング」を必要以上に複雑にするのでしょうか。

Laravel4でテスト済み。

もう1つの利点は、構文の強調表示が適切に機能することです(以前はコメントハックを使用していましたが、読むのが大変でした)

于 2015-05-26T13:16:38.410 に答える
25

Laravel 5.2.23以降、@ php Bladeディレクティブがあり、インラインまたはブロックステートメントとして使用できます。

@php($old_section = "whatever")

また

@php
    $old_section = "whatever"
@endphp
于 2016-07-21T09:21:21.803 に答える
23

ブレードテンプレートエンジンで変数を設定するには、次の方法があります

。1.一般的なPHPブロック
設定変数: <?php $hello = "Hello World!"; ?>
出力: {{$hello}}

2。ブレードPHPブロック
設定変数: @php $hello = "Hello World!"; @endphp
出力: {{$hello}}

于 2018-05-13T05:59:23.990 に答える
20

ビューファイルに変数を設定できますが、設定したとおりに出力されます。とにかく、回避策があります。未使用のセクション内に変数を設定できます。例:

@section('someSection')
  {{ $yourVar = 'Your value' }}
@endsection

次に、必要な場所{{ $yourVar }}に印刷Your valueしますが、変数を保存しても出力は得られません。

編集:セクションに名前を付ける必要があります。そうしないと、例外がスローされます。

于 2013-05-10T16:19:45.137 に答える
19

Laravelドキュメントhttps://laravel.com/docs/5.8/blade#php この方法で行うことができます:

@php
     $my_variable = 123;
@endphp
于 2020-03-07T11:35:58.267 に答える
16

Laravel 4:

テンプレートだけでなく、すべてのビューで変数にアクセスできるようにする場合View::shareは、優れた方法です(このブログの詳細を参照してください)。

app / controllers/BaseController.phpに以下を追加するだけです

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

これで$myvar、テンプレートを含むすべてのビューで使用できるようになります。

これを使用して、画像の環境固有のアセットURLを設定しました。

于 2014-02-06T19:55:31.227 に答える
8

そして突然何も表示されません。私の経験から、このようなことをする必要がある場合は、モデルのメソッドでhtmlを準備するか、コードを配列などに再編成します。

ただ1つの方法はありません。

{{ $x = 1 ? '' : '' }}
于 2013-03-27T15:53:49.460 に答える
7

@Pimからの回答を拡張します。

これをAppServiceProviderのbootメソッドに追加します

<?php
/*
|--------------------------------------------------------------------------
| Extend blade so we can define a variable
| <code>
| @set(name, value)
| </code>
|--------------------------------------------------------------------------
*/

Blade::directive('set', function($expression) {
    list($name, $val) = explode(',', $expression);
    return "<?php {$name} = {$val}; ?>";
});

このようにして、php式を作成する機能を公開しません。

このディレクティブは次のように使用できます。

@set($var, 10)
@set($var2, 'some string')
于 2016-05-02T11:25:35.193 に答える
6

Laravel 5.1、5.2では

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

アプリケーションによってレンダリングされるすべてのビューとデータを共有する必要がある場合があります。ビューファクトリの共有メソッドを使用してこれを行うことができます。通常、サービスプロバイダーのbootメソッド内で共有するための呼び出しを行う必要があります。それらをAppServiceProviderに追加するか、それらを収容するための別のサービスプロバイダーを生成することができます。

ファイルの編集:/app/Providers/AppServiceProvider.php

<?php

namespace App\Providers;

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

    public function register()
    {
        // ...
    }
}
于 2016-04-21T21:02:34.060 に答える
6

私が公開したパッケージを使用できます:https ://github.com/sineld/bladeset

次に、変数を簡単に設定します。

@set('myVariable', $existing_variable)

// or

@set("myVariable", "Hello, World!")
于 2016-10-11T12:29:10.050 に答える
6

Laravel 7:

{{ $solution = "Laravel 7 is awesome and easy to use !!" }}
于 2021-06-02T12:36:15.393 に答える
4

私の優雅なやり方は次のようなものです

{{ ''; $old_section = "whatever"; }}

$old_sectionそして、変数をエコーするだけです。

{{ $old_section }}
于 2014-10-17T04:30:43.980 に答える
4

PHP 7.0を使用している場合:

簡単で最も効果的な方法は、角かっこ内に割り当てることです。

ルールは単純です。変数を複数回使用しますか?次に、括弧内で初めて使用するときに宣言し、落ち着いて続行します。

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

そして、はい、私は知っています@forelse、これは単なるデモです。

変数は使用時に宣言されるようになったため、ブレードの回避策は必要ありません。

于 2016-06-15T22:38:18.573 に答える
4

ブレードテンプレートに変数を割り当てます。解決策は次のとおりです。

<?php ?>ブレードページでタグを使用できます

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

また

特別な構文でブレードコメントを使用できます

{{--*/ $var = 'test' /*--}}
{{ $var }}
于 2016-10-24T12:56:13.743 に答える
4

私もこの同じ問題に苦労しました。しかし、私は次のコードセグメントを使用してこの問題を管理することができました。ブレードテンプレートでこれを使用します。

<input type="hidden" value="{{$old_section = "whatever" }}">

{{$old_section }}
于 2020-09-27T10:16:50.643 に答える
2

できるとは思いませんが、この種のロジックはおそらくコントローラーで処理し、既に設定されているビューに渡す必要があります。

于 2012-10-21T22:18:32.293 に答える
2

キーに値を割り当てて、それを自分のビューで何度も使用する方法を探していました。この場合、@section{"key", "value"}最初にを使用してから呼び出し@yield{"key"}て、ビューまたはその子の他の場所に値を出力できます。

于 2016-04-22T22:15:59.123 に答える
1

コメントをハッキングすることは、それを行うための非常に読みやすい方法ではありません。また、編集者はそれをコメントとして色付けし、コードを見るときに誰かがそれを見逃す可能性があります。

次のようなものを試してください。

{{ ''; $hello = 'world' }}

コンパイルされます:

<?php echo ''; $hello = 'world'; ?>

...そして割り当てを行い、何もエコーしません。

于 2014-12-11T06:46:07.030 に答える
1

コントローラで変数を定義してから、compact()または->with()メソッドを使用してビューに渡す練習をすることをお勧めします。

それ以外の場合は、#TLGregがベストアンサーを出しました。

于 2015-07-05T12:02:21.283 に答える
1

Blade radic/blade-extensionsには非常に優れた拡張機能があります。追加した後、@ set(variable_name、variable_value)を使用できます

@set(var, 33)
{{$var}}
于 2015-12-09T13:04:15.870 に答える
0

私の意見では、ロジックをコントローラーに保持し、それをビューに渡して使用する方がよいでしょう。これは、「View::make」メソッドを使用して2つの方法のいずれかで実行できます。私は現在Laravel3を使用していますが、Laravel4でも同じように使用できると確信しています。

public function action_hello($userName)
{
    return View::make('hello')->with('name', $userName);
}

また

public function action_hello($first, $last)
{
    $data = array(
        'forename'  => $first,
        'surname' => $last
    );
    return View::make('hello', $data);
}

'with'メソッドは連鎖可能です。次に、上記のように使用します。

<p>Hello {{$name}}</p>

詳細はこちら:

http://three.laravel.com/docs/views

http://codehappy.daylerees.com/using-controllers

于 2013-08-15T16:37:54.240 に答える
0

同様の質問があり、 ViewComposersで正しい解決策と思われるものを見つけました

ビューコンポーザーを使用すると、特定のビューが呼び出されるたびに変数を設定できます。変数は、特定のビューまたはビューテンプレート全体にすることができます。とにかく、それは質問に対する直接の答えではないことを私は知っています(そして2年遅すぎます)が、ブレードでビュー内に変数を設定するよりも優雅な解決策のようです。

View::composer(array('AdminViewPath', 'LoginView/subview'), function($view) {
    $view->with(array('bodyClass' => 'admin'));
});
于 2014-08-18T07:12:50.463 に答える
0

laravel5あなたはこれを簡単に行うことができます。下記参照

{{--*/ @$variable_name = 'value'  /*--}}
于 2016-03-12T09:19:12.357 に答える
0

以下に示すように、extendメソッドを使用してブレードを拡張できます。

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

その後、次のように変数を初期化します。

@var $var = "var"
于 2019-04-19T16:59:26.293 に答える
0

ブレードファイル内では、この形式を使用できます

@php
  $i++
@endphp
于 2020-09-14T10:18:44.873 に答える
0

laravel8で

@php

 $name="Abdul mateen";

{{ echo $name; }}
    
@endphp
于 2022-01-30T05:32:41.453 に答える
-2

ブレードのすべてのバージョンで動作します。

{{--*/  $optionsArray = ['A', 'B', 'C', 'D','E','F','G','H','J','K'] /*--}}
于 2016-10-06T07:05:31.333 に答える