RequireJS PHP 和漂亮的 URL
RequireJS with PHP and nice URL
我已经尝试解决这个问题好几个小时了,但无论是在我自己还是在互联网上都找不到解决方案,所以最后我放弃了,决定 post 一个问题。
我正在尝试构建我的新 PHP 应用程序 javascript 作为 AMD 管理,使用 RequireJS。这是我第一次使用这种方法,对此我感到非常兴奋,但是有一个问题使我的 javascript 无法正常工作。
路由很好url。 (我使用 Nette Framework 作为路由,使用 Apache 作为网络服务器)。在我设置 requrejs 和我的依赖项之后,主页 (localhost/) 一切正常,但是当我转到其他页面时,它有 URL 类似 localhost/news 的东西,它停止工作并且 requirejs 抱怨例如 "localhost/testapp/news/js/vendor/jquery/dist/jquery.js"
中不存在的脚本。它应该在 "localhost/testapp/js/vendor/jquery/dist/jquery.js"
中查找,但它采用由 mod_rewrite 重写的参数(在本例中为演示者姓名)作为基础 url 的一部分。我认为故障出在我这边,因为这必须是非常常见的设置,我找不到类似的问题。
layout.latte 中的 requirejs(基本模板):
<script src="{$basePath}/js/vendor/requirejs/require.js"></script>
<script>
var absolute_base = {$basePath};
require([absolute_base + '/js/app.js']);
</script>
(在 Nette 框架中的 basePath 变量中始终是应用程序的根目录,而不管其他参数 - 在这种情况下,/testapp
)
app.js
requirejs.config({
baseUrl: 'js/modules',
paths: {
'jquery': '../vendor/jquery/dist/jquery',
'ink': '../vendor/InkJS/dist/js/ink-all',
'ajax': '../vendor/ajax'
}
});
目录结构:
- www
- css
- sass
- graphics
- fonts
- js
- modules
- vendor
- jquery
- requirejs
- ink
- app.js
- index.php
据我所知。我已经尝试了很多组合、相对路径、路径前面的点、脚本标记的数据属性等,但一直未能找到解决方案。
非常感谢任何帮助,干杯!
我终于成功了。我发现,它不能以这种方式完成,因为 requirejs 将 always 使用当前 url 作为 "root",而不是 URL 脚本本身(在 "script" 标记中使用)。至少我还没有找到解决这个问题的方法。
相反,我删除了整个 app.js 文件并将配置直接移动到主模板中,其中 php 变量 $basePath 可用,我用它来定义 basePath(基本上我定义了一个绝对路径而不是相对路径)。
我已经尝试解决这个问题好几个小时了,但无论是在我自己还是在互联网上都找不到解决方案,所以最后我放弃了,决定 post 一个问题。
我正在尝试构建我的新 PHP 应用程序 javascript 作为 AMD 管理,使用 RequireJS。这是我第一次使用这种方法,对此我感到非常兴奋,但是有一个问题使我的 javascript 无法正常工作。
路由很好url。 (我使用 Nette Framework 作为路由,使用 Apache 作为网络服务器)。在我设置 requrejs 和我的依赖项之后,主页 (localhost/) 一切正常,但是当我转到其他页面时,它有 URL 类似 localhost/news 的东西,它停止工作并且 requirejs 抱怨例如 "localhost/testapp/news/js/vendor/jquery/dist/jquery.js"
中不存在的脚本。它应该在 "localhost/testapp/js/vendor/jquery/dist/jquery.js"
中查找,但它采用由 mod_rewrite 重写的参数(在本例中为演示者姓名)作为基础 url 的一部分。我认为故障出在我这边,因为这必须是非常常见的设置,我找不到类似的问题。
layout.latte 中的 requirejs(基本模板):
<script src="{$basePath}/js/vendor/requirejs/require.js"></script>
<script>
var absolute_base = {$basePath};
require([absolute_base + '/js/app.js']);
</script>
(在 Nette 框架中的 basePath 变量中始终是应用程序的根目录,而不管其他参数 - 在这种情况下,/testapp
)
app.js
requirejs.config({
baseUrl: 'js/modules',
paths: {
'jquery': '../vendor/jquery/dist/jquery',
'ink': '../vendor/InkJS/dist/js/ink-all',
'ajax': '../vendor/ajax'
}
});
目录结构:
- www
- css
- sass
- graphics
- fonts
- js
- modules
- vendor
- jquery
- requirejs
- ink
- app.js
- index.php
据我所知。我已经尝试了很多组合、相对路径、路径前面的点、脚本标记的数据属性等,但一直未能找到解决方案。
非常感谢任何帮助,干杯!
我终于成功了。我发现,它不能以这种方式完成,因为 requirejs 将 always 使用当前 url 作为 "root",而不是 URL 脚本本身(在 "script" 标记中使用)。至少我还没有找到解决这个问题的方法。
相反,我删除了整个 app.js 文件并将配置直接移动到主模板中,其中 php 变量 $basePath 可用,我用它来定义 basePath(基本上我定义了一个绝对路径而不是相对路径)。