【问题标题】:Using Laravel functions inside a javascript file that is included as an asset在作为资产包含的 javascript 文件中使用 Laravel 函数
【发布时间】:2013-05-14 07:20:45
【问题描述】:

假设我有一段 jQuery javascript,它在加载时绑定到 div 并在该 div 中动态定义 img。像这样的:

$(document).ready(function() {
    $("#container").html("<img href='/images/myimage.jpg/>');
});

如果我在 Laravel 视图中使用这个内联,我可以使用 HTML::image() 和 Blade 模板来指定图像的位置。像这样的:

$(document).ready(function() {
    $("#container").html("{{ HTML::image('images/myimage.jpg', 'My image') }}");
});

如果我要获取那段 javascript,而不是将其内联在视图中,而是将其放在单独的 .js 文件中,例如 public/js/image.js,我可以让 Laravel 将其作为资产加载;

Asset::add('image.js', 'js/image.js');

但是,由于它现在只被视为资产,因此 Laravel PHP 和 Blade 模板代码都没有被处理,所以我们从字面上得到字符串 {{ HTML::image('images/myimage.jpg', 'My image') }} 在生成的 html 中,而不是模板化的值。

这样的事情有什么好的方法吗?

【问题讨论】:

  • 如果不将其发送到服务器,您就可以通过 Blade 解析器运行它并取回已解析的字符串。或者您可以只使用原始 HTML,如您在第一个代码示例中所示。
  • 你只是要求这个附加基本 URL 吗?
  • 我只是为示例选择了细节。一种普遍接受的技术会很有用。
  • 一般情况下 - 不要混合使用 php 和 JS。如果您需要将值传递给 JS 脚本,要么将其作为 HTML 中的元/链接标签输出,要么将一些 javascript 写入执行此类配置的页面 - 就像谷歌分析可能一样。

标签: php javascript jquery laravel blade


【解决方案1】:

我认为你可以把它放在一个 php 文件中。我以前用 css 做过。

Asset::add('image.php', 'js/image.php');

【讨论】:

  • 没有。这行不通。 CSS 可能包含在此技术中,但 PHP 文件仍不会被解析为 PHP 文件。
【解决方案2】:

我在这里做这个。我找到的方法是:

1 - 在视图目录树中创建一个“js”文件,类似于

app\views\javascript\mycustomJS.blade.php

2 - 然后在需要的地方渲染它:

<script>
    @include('javascript.mycustomJS')
</script>

它是刀片,它会被处理。

我知道,这远非理想,但目前它对我有用。 :)

【讨论】:

  • 我现在正在使用您的解决方案。你有没有找到更好的方法来解决这个问题?顺便说一句,感谢您的解决方案
猜你喜欢
  • 1970-01-01
  • 2018-07-31
  • 1970-01-01
  • 2011-09-24
  • 2018-04-13
  • 2016-08-01
  • 1970-01-01
  • 2019-07-22
  • 2017-05-14
相关资源
最近更新 更多