如何设置 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 的所有功能和控制,并且仍然保留我的代码格式。编码愉快。
我正在构建一个由外部包含加载的 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 的所有功能和控制,并且仍然保留我的代码格式。编码愉快。