如何设置 Javascript AS Blade 模板以用于 API 端点?

How to set up Javascript AS a Blade template for use in an API endpoint?

我正在构建一个由外部包含加载的 Javascript 程序。像这样:

<!DOCTYPE html>
<html lang="en">
<head>
    ...
</head>
<body>
    ...html here....    

<script defer>
    myjs = document.createElement('script');
    myjs.setAttribute('src', 'http://myapi.com/api/v1/get_the_js/');
    myjs.setAttribute('type', 'text/javascript');
    document.head.appendChild(myjs);
</script>
</body>
</html>

在 Laravel 中,我目前有通往此功能的路线:

class JSPluginController extends Controller
{    
    public function index()
    {
        $js = resource_path() . '/js/myjs.js';
        return file_get_contents($js);
    }
}

这行得通。但是,我想将 myjs.js 更改为 blade 模板,以便我可以使用 blade 的强大功能。

到目前为止,我发现这样做的唯一方法是添加脚本标签,这样我就可以在我的 IDE 中实际看到 js 格式,但它显然会破坏 [=38] 的返回输出=].这是我目前所拥有的:

这里的端点路由:

class JSPluginController extends Controller
{
    public function js_blade()
    {
        return view('jsplugin/main');
    }
}

并在 /resources/views/jsplugin/main.blade.js:

<script>
   .. my js goes here {{ $withBladeStuff }} ...
</script>

有更好的方法吗?

值得注意的是,我还打算将我的JS分解成多个文件,比如根据需要将它们抽象成不同的部分。

(旁注:我的 PHP 格式符合 PSR-12。无需编辑,谢谢。)

我通过添加几个简单的步骤来满足我的需要解决了这个问题。

澄清一下,此控制器路由一个 api 端点,该端点作为脚本被拉入外部站点,如下所示:

<script defer>
    js = document.createElement('script');
    js.setAttribute('src', 'https://example.com/api/v1/get_js');
    js.setAttribute('type', 'text/javascript');
    document.head.appendChild(js);
</script>

所以它必须在没有标签的情况下拉取 javascript。然而,在我的 IDE 中编辑 blade 不喜欢它,因为它是一个 blade.php 文件,我想要 JS 的自动代码样式。

因此,我更新了控制器以添加变量 $included:

class JSPluginController extends Controller
{
    public function index()
    {
        $included = true;
        $env = \App::environment();

        return view('js/main', compact('included', 'env'));
    }
}

然后 $included 变量被传递到 blade (/resources/views/js/main.blade.php),这仍然允许我的 IDE 进行代码格式化:

@if(!$included)
<script>
@endif
    let hello_world = "{{ $env }}";
    document.write("The environment is: " + hello_world);
@if(!$included)
</script>
@endif

这很好地满足了我的需求!我可以使用 blade 的所有功能和控制,并且仍然保留我的代码格式。编码愉快。