如何在 Laravel 中使用 @include 指令引用非 PHP 文件?

3

我一直在寻找一种使用Laravel的Blade模板引擎处理非PHP文件扩展名的方法(而不是使用file_name.blade.php,可以使用file_name.blade.jsfile_name.blade.css),但一直未能找到。我找到了一个 帖子 ,看起来描述了如何在Laravel 4中实现此功能,但似乎在Laravel 5中不再适用。我想这么做的原因是我有一个类似于以下内容的JavaScript文件:

//JS stuff
@foreach($Model->Values as $Value)
    {{ $Value->name . " = " . $Value->content . ";"}}
@endforeach
//More JS stuff

还有一个看起来像这样的blade/php文件:

//Blade stuff
<script type="text/javascript">
@include('js');
</script>

这似乎是将每个值传递给JavaScript的最好方法。即使有更好的方法将这些值传递给JavaScript,提出这个问题的原因是想找到一种使用Blade解析非PHP文件的方法,我认为这可能会非常有用。


1
你提到了这个并表示不同意,但我认为这不是最好的方法,而且我不确定为什么你想在HTML文件之外使用blade。它的目的是为HTML添加一些更多的功能,但如果你在像js这样的东西中,你已经可以使用循环而不需要blade。 - tam5
1
我认为 View::addExtension('blade.js', 'blade') 在 L5 中也能工作。该方法并没有改变。但请注意,您需要使用 Blade 引擎,而不是像您链接的帖子中的 HTML 引擎。至于放在哪里是一个好问题,您提到您的两个文件在扩展名之前具有相同的名称 - 这可能会导致出现问题。 - Joel Hinz
1
非常好的观点,@JoelHinz。将其作为答案发布,因为这是正确的解决方案。 - Bogdan
谢谢确认,@Bogdan,我会的。 :) - Joel Hinz
1个回答

0

我认为在L5中 View::addExtension('blade.js', 'blade') 也能起作用。这个方法没有改变。但请注意,你需要使用blade引擎,而不是像你链接的帖子中使用的html引擎。至于放在哪里,这是一个好问题。另外,你提到你的两个文件在扩展名之前有相同的名称 - 这可能会导致出现问题。


只有一个带有唯一名称的文件。我正在使用刀片引擎而不是我链接到的HTML引擎。你可能非常正确关于View::addExtension('blade.js', 'blade')仍然有效,但是在将其添加到我的BaseController之后,它似乎并没有起作用。我的BaseController看起来像这样 - C.Liddell
1
@C.Liddell,我看到你正在尝试实现旧的Laravel 4.2控制器布局方法(已停止使用以支持模板继承),你在哪里调用setupLayout方法?因为自从Laravel 5没有将该方法作为核心控制器类的一部分时,它不再自动为您调用。 - Bogdan
@Bogdan 将您上面的评论作为答案添加。只需调用 setupLayout() 方法就可以了,我错误地认为它是由 Laravel 自动调用的。感谢你们两个的帮助。 - C.Liddell
谢谢你们两位。我去睡觉了,所以没能及时回复。@Bogdan,随意领取荣誉并获得被采纳的答案。 :) - Joel Hinz

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接