我正在构建一个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更改为刀片模板,以便可以使用刀片的功能。
到目前为止,我找到的唯一方法是添加脚本标记,这样我就可以在IDE中实际看到js格式,但这显然会破坏API的返回输出。这是我到目前为止所知道的:
终结点的路由如下:
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兼容的。不需要编辑,谢谢。)
发布于 2021-06-29 21:58:48
我通过添加几个简单的步骤来满足我的需求,从而解决了这个问题。
为了清楚起见,此控制器将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。但是,在我的集成开发环境中编辑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变量传递给刀片(/resources/views/js/main.blade.php
),这仍然允许我的集成开发环境进行代码格式化:
@if(!$included)
<script>
@endif
let hello_world = "{{ $env }}";
document.write("The environment is: " + hello_world);
@if(!$included)
</script>
@endif
这很好地满足了我的需求!我可以使用blade的所有功能和控制,同时仍然保留我的代码格式。祝你编码愉快。
https://stackoverflow.com/questions/68123955
复制相似问题