Laravel Bladeのドキュメントを読んでいますが、後で使用するためにテンプレート内で変数を割り当てる方法がわかりません。{{ $old_section = "whatever" }}
それは「何でも」エコーするので、私はできません。私はそれを望んでいません。
できることは理解していますが<?php $old_section = "whatever"; ?>
、それはエレガントではありません。
ブレードテンプレートでそれを行うためのより良い、エレガントな方法はありますか?
Laravel Bladeのドキュメントを読んでいますが、後で使用するためにテンプレート内で変数を割り当てる方法がわかりません。{{ $old_section = "whatever" }}
それは「何でも」エコーするので、私はできません。私はそれを望んでいません。
できることは理解していますが<?php $old_section = "whatever"; ?>
、それはエレガントではありません。
ブレードテンプレートでそれを行うためのより良い、エレガントな方法はありますか?
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
変数を定義します。
ビューで行うことはお勧めしません。そのため、ブレードタグはありません。ブレードビューでこれを実行したい場合は、作成したとおりにphpタグを開くか、新しいブレードタグを登録することができます。ほんの一例:
<?php
/**
* <code>
* {? $old_section = "whatever" ?}
* </code>
*/
Blade::extend(function($value) {
return preg_replace('/\{\?(.+)\?\}/', '<?php ${1} ?>', $value);
});
laravel-4では、テンプレートコメント構文を使用して変数を定義/設定できます。
コメント構文は であり、ブレードエンジン{{-- anything here is comment --}}
によって次のようにレンダリングされます。
<?php /* anything here is comment */ ?>
少しのトリックで、たとえば変数を定義するためにそれを使用できます
{{-- */$i=0;/* --}}
変数を設定する
ブレードによってレンダリングされます。<?php /* */$i=0;/* */ ?>
コード行を変更せずに。
コードを変更する必要のない簡単な回避策があり、Laravel4でも同様に機能します。
=
ステートメントに渡される式では@if
、(たとえば)のような演算子の代わりに、代入演算子()を使用するだけ==
です。
@if ($variable = 'any data, be it string, variable or OOP') @endif
その後、他の変数を使用できる場所ならどこでも使用できます
{{ $variable }}
唯一の欠点は、回避策としてこれを行っていることに気付いていない人にとっては、割り当てが間違いのように見えることです。
Ya'llはそれを複雑にしすぎます。
プレーンphpを使用するだけ
<?php $i = 1; ?>
{{$i}}
ドニー。
(またはhttps://github.com/alexdover/blade-setもかなり単純に見えます)
私たちは皆、ビューに変数を設定することでシステムを「ハッキング」しているのですが、なぜ「ハッキング」を必要以上に複雑にするのでしょうか。
Laravel4でテスト済み。
もう1つの利点は、構文の強調表示が適切に機能することです(以前はコメントハックを使用していましたが、読むのが大変でした)
Laravel 5.2.23以降、@ php Bladeディレクティブがあり、インラインまたはブロックステートメントとして使用できます。
@php($old_section = "whatever")
また
@php
$old_section = "whatever"
@endphp
ブレードテンプレートエンジンで変数を設定するには、次の方法があります
。1.一般的なPHPブロック
設定変数: <?php $hello = "Hello World!"; ?>
出力: {{$hello}}
2。ブレードPHPブロック
設定変数: @php $hello = "Hello World!"; @endphp
出力: {{$hello}}
ビューファイルに変数を設定できますが、設定したとおりに出力されます。とにかく、回避策があります。未使用のセクション内に変数を設定できます。例:
@section('someSection')
{{ $yourVar = 'Your value' }}
@endsection
次に、必要な場所{{ $yourVar }}
に印刷Your value
しますが、変数を保存しても出力は得られません。
編集:セクションに名前を付ける必要があります。そうしないと、例外がスローされます。
Laravelドキュメントhttps://laravel.com/docs/5.8/blade#php この方法で行うことができます:
@php
$my_variable = 123;
@endphp
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を設定しました。
そして突然何も表示されません。私の経験から、このようなことをする必要がある場合は、モデルのメソッドでhtmlを準備するか、コードを配列などに再編成します。
ただ1つの方法はありません。
{{ $x = 1 ? '' : '' }}
@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')
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()
{
// ...
}
}
私が公開したパッケージを使用できます:https ://github.com/sineld/bladeset
次に、変数を簡単に設定します。
@set('myVariable', $existing_variable)
// or
@set("myVariable", "Hello, World!")
Laravel 7:
{{ $solution = "Laravel 7 is awesome and easy to use !!" }}
私の優雅なやり方は次のようなものです
{{ ''; $old_section = "whatever"; }}
$old_section
そして、変数をエコーするだけです。
{{ $old_section }}
PHP 7.0を使用している場合:
簡単で最も効果的な方法は、角かっこ内に割り当てることです。
ルールは単純です。変数を複数回使用しますか?次に、括弧内で初めて使用するときに宣言し、落ち着いて続行します。
@if(($users = User::all())->count())
@foreach($users as $user)
{{ $user->name }}
@endforeach
@else
There are no users.
@endif
そして、はい、私は知っています@forelse
、これは単なるデモです。
変数は使用時に宣言されるようになったため、ブレードの回避策は必要ありません。
ブレードテンプレートに変数を割り当てます。解決策は次のとおりです。
<?php ?>
ブレードページでタグを使用できます
<?php $var = 'test'; ?>
{{ $var }
また
特別な構文でブレードコメントを使用できます
{{--*/ $var = 'test' /*--}}
{{ $var }}
私もこの同じ問題に苦労しました。しかし、私は次のコードセグメントを使用してこの問題を管理することができました。ブレードテンプレートでこれを使用します。
<input type="hidden" value="{{$old_section = "whatever" }}">
{{$old_section }}
できるとは思いませんが、この種のロジックはおそらくコントローラーで処理し、既に設定されているビューに渡す必要があります。
キーに値を割り当てて、それを自分のビューで何度も使用する方法を探していました。この場合、@section{"key", "value"}
最初にを使用してから呼び出し@yield{"key"}
て、ビューまたはその子の他の場所に値を出力できます。
コメントをハッキングすることは、それを行うための非常に読みやすい方法ではありません。また、編集者はそれをコメントとして色付けし、コードを見るときに誰かがそれを見逃す可能性があります。
次のようなものを試してください。
{{ ''; $hello = 'world' }}
コンパイルされます:
<?php echo ''; $hello = 'world'; ?>
...そして割り当てを行い、何もエコーしません。
コントローラで変数を定義してから、compact()
または->with()
メソッドを使用してビューに渡す練習をすることをお勧めします。
それ以外の場合は、#TLGregがベストアンサーを出しました。
Blade radic/blade-extensionsには非常に優れた拡張機能があります。追加した後、@ set(variable_name、variable_value)を使用できます
@set(var, 33)
{{$var}}
私の意見では、ロジックをコントローラーに保持し、それをビューに渡して使用する方がよいでしょう。これは、「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>
詳細はこちら:
同様の質問があり、 ViewComposersで正しい解決策と思われるものを見つけました
ビューコンポーザーを使用すると、特定のビューが呼び出されるたびに変数を設定できます。変数は、特定のビューまたはビューテンプレート全体にすることができます。とにかく、それは質問に対する直接の答えではないことを私は知っています(そして2年遅すぎます)が、ブレードでビュー内に変数を設定するよりも優雅な解決策のようです。
View::composer(array('AdminViewPath', 'LoginView/subview'), function($view) {
$view->with(array('bodyClass' => 'admin'));
});
laravel5あなたはこれを簡単に行うことができます。下記参照
{{--*/ @$variable_name = 'value' /*--}}
以下に示すように、extendメソッドを使用してブレードを拡張できます。
Blade::extend(function($value) {
return preg_replace('/\@var(.+)/', '<?php ${1}; ?>', $value);
});
その後、次のように変数を初期化します。
@var $var = "var"
ブレードファイル内では、この形式を使用できます
@php
$i++
@endphp
laravel8で
@php
$name="Abdul mateen";
{{ echo $name; }}
@endphp
ブレードのすべてのバージョンで動作します。
{{--*/ $optionsArray = ['A', 'B', 'C', 'D','E','F','G','H','J','K'] /*--}}