web-dev-qa-db-ja.com

Laravel 4 Blade @include変数

Laravelブレードでincludeを実行しようとしましたが、問題は変数を渡すことができないことです。次のコード例です:

file_include.blade.php

<?php
  $myvar = "some text";

main.blade.php

@include('file_include')
{{$myvar}}

ファイルを実行すると、「Undefined variable:myvar」というエラーが返されます。だから、インクルードファイルからメインファイルに変数を渡すにはどうすればよいですか?

ありがとうございました。

27
user1995781

なぜインクルードから呼び出しテンプレートに渡すのですか?呼び出し元のテンプレートで必要な場合は、そこで作成し、次のように含まれているテンプレートに渡します。

@include('view.name', array('some'=>'data'))

http://laravel.com/docs/templates の上記のコードスニペット

53
Kenny

残念ながらLaravelブレードエンジンはあなたが期待したものをサポートしていません!

ソリューション1-Laravel Blade Engineなし

ステップa:

から

file_include.blade.php

file_include.php

ステップb:

main.blade.php

<?php 
     include('app/views/file_include.php')
?>
{{$myvar}}

ソリューション2 with Laravel Blade Engine

routes.php

$data = array(
'data1'         => "one",
'data2'         => "two",
);

View::share('data', $data); 

このようにAny Viewから$ data配列にアクセスします

{{ $data['data1'] }}

出力

one
8
ErcanE

Bladeは、Laravelのテンプレートエンジンです。そのため、コントローラーから値を渡すか、テスト目的でroutes.phpで定義してください。

@includeは、サブビューを含めるために使用されます。

2
Shubhamoy

Laravel Bladeテンプレート。@includeを使用してテンプレートを含めると、親ビュー(定義されたビュー)からすべての変数を継承します。親スコープの子ビューで定義された変数を使用できないと思います。変数を親が使用できるようにするには、View::share($variableName, $variableValue)を使用してみてください。

1
lukaserat

このシナリオでは$myvarは、include呼び出しのローカルスコープでのみ使用できます。

コントローラーから変数を直接送信してみませんか?

0
cecilozaur

古典的なPHP変数を本当に変更したい場合に必要です(それは参照によって自動的に行われます)

0
Sven P