Laravel 5如何动态包含外部CSS和JS文件取决于控制器/路由

时间:2015-05-29 07:04:14

标签: laravel-5

我想知道什么是好方法 在我的主刀片中动态包含一个js文件 像这样的模板

<?php
$currentRoute = Route::currentRouteName();
$currentRoute = $currentRoute?$currentRoute:'home';
$currentRoute = explode('.',$currentRoute);
  ?>
<script src="{{$currentRoute[0]}}.js"></script> 

但只是不那么棘手:)

1 个答案:

答案 0 :(得分:5)

我过去曾做过类似的事情。 在这里,这是我的“技巧”。

首先,您需要一个顶级控制器类

class MainController extends Controller {

   protected static $js_files  = [];
   protected static $css_files = [];

   public static function boot()
   {
      view()->share('js_files', static::$js_files);
      view()->share('css_files', static::$css_files);
      parent::boot();
   }
}

然后,所有控制器都必须从MainController类继承。

我使用关键字“static ::”而不是“self ::”的原因是因为我想要检索最新的子属性而不是“MainController”属性,它会给我关键字“self ::”

参见http://php.net/manual/en/language.oop5.late-static-bindings.php 在刀片布局中,在头部中执行以下操作:

@foreach($css_files as $src)
   <link href="{{$src}}" rel="stylesheet">
@endforeach

在结束身体标签之前

@foreach($js_files as $src)
    <script src="{{$src}}"></script>
@endforeach

在每个控制器中,您必须在$ js_files和$ css_files继承的属性中放入所有js / css的源。

如果你想只为一条路线包含一个JS / CSS,你可以直接在方法中添加文件的来源。

瞧!