簡體   English   中英

將數組從視圖(Blade)傳遞到laravel中的另一個視圖(Blade)

[英]Passing array from view(Blade) to another view(Blade) in laravel

我有laravel刀片模板main.blade.php主布局

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>@yield('title','My Site')</title>
</head>
<body>
    @yield('container','Content area')

    {{ HTML::script('assets/js/jquery-1.9.0.js') }}

</body>
</html>

我將其擴展為另一個視圖index.blade.php

@extend('main')

我想將javascript鏈接添加到主布局( main.blade.php )(如果子布局( index.blade.php )中存在)

index.blade.php添加了代碼

$extraJs = array('plugins1.js','plugins2.js');

@section('extraJs')
{{ $extraJs }}
@stop

那么,如果子刀片中存在JavaScript,如何將javascript添加到主布局?

在php中:

<?php 
if(isset($extraJs)): 
foreach($extraJs as $js):
?>
<script src="assets/js/<?php echo $js ?>" type="text/javascript" />
<?php endforeach; endif; ?>

您可以在main.blade.php添加一個yield,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>@yield('title','My Site')</title>
</head>
<body>
    @yield('container','Content area')

    {{ HTML::script('assets/js/jquery-1.9.0.js') }}

    @yield('javascripts')
</body>
</html>

然后,在子布局中為它添加一個部分,就像之前一樣。 例如:

@section('javascripts')
    @foreach($scripts as $script)
        {{ HTML::script('ets/js/' . $script) }}
    @endforeach
@stop

如果您添加了另一個不需要使用額外的JavaScript的子視圖,Laravel不會抱怨,因為該部分是可選的。

自您提出要求以來,我實際上並不鼓勵使用此方法。 肯定有可能在視圖樹中傳遞某些內容。 您只需在視圖中定義一個PHP變量,它就可以在布局中的任何位置使用。

index.blade.php

<?php $extraJs = array('plugins1.js','plugins2.js'); ?>

main.blade.php

@if(isset($extraJs))
    @foreach($extraJs as $js)
        <script src="{{ asset('assets/js/'.$js) }}" type="text/javascript" />
    @endforeach
@endif

如您所見,我還將布局中的代碼轉換為Blade並利用asset()函數生成絕對URL

注意除了以這種方式進行操作外,還有其他方法。 例如, 查看作曲家或在控制器中定義插件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM