【问题标题】:Using third-party javascript in MVC在 MVC 中使用第三方 javascript
【发布时间】:2014-05-12 01:16:39
【问题描述】:

我正在尝试调用位于 ~/vendor/ 目录(请参阅下面的架构)中的 javascript 函数但没有成功。如果我将该 javascript 移动到我的目录 ~/public/js/ 调用成功。

我相信我的问题可能来自我的 .htaccess 文件,但尽管阅读了很多资料,但我没有找到解决它的方法。如果有人能指出我正确的方向,我会很高兴。

这是目录结构(注意 root 和 public/ 中的 .htaccess):

<project name>/
    application/
        config/
        controllers/
        models/
        views/
    public/
        css/
        images/
        js/     <- if placed here, the call succeeds
        .htaccess
        index.php
    vendor/
        <third-party code>/
            javascript.js     <- here, it doesn't
    .htaccess

这是 .htaccess 文件的内容:

  • 在根目录上:

    <IfModule mod_rewrite.c>
        RewriteEngine on
        RewriteRule    ^$    public/    [L]
        RewriteRule    (.*) public/$1    [L]
     </IfModule>
    
  • 在公共目录中:

    <IfModule mod_rewrite.c>
        RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.*)$ index.php?page=$1 [PT,L]
    </IfModule>
    

【问题讨论】:

  • 你为什么没有'public/js/Vendor'文件夹。这会解决你的问题。
  • 嗯,是的,根据那些重写规则,只有你的 public 目录是公开的。更改规则或移动文件。
  • 是的,但是这个供应商也有我想使用的 CSS。将与该供应商相关的所有内容放在一个且只有一个目录中,而不是 /public/css/vendor/style.css 和 /public/js/vendor/jscript.js 似乎更简洁
  • 你能有'public/Vendor/whatever'文件夹吗?
  • 这样说吧,我认为当您可以将 Vendor 文件夹添加到公共文件夹时,重写规则将是 bad 做法(我认为应该这样做去)。

标签: javascript php .htaccess mod-rewrite


【解决方案1】:

我建议您选择:

public/js/Vendor
public/css/Vendor

public/Vendor/js
public/Vendor/css

将是最好的方法。我认为当您可以将 Vendor 文件夹添加到公共文件夹时重写规则是不好的做法(这是我认为应该去的地方)。

【讨论】:

    【解决方案2】:

    应该位于公共目录之外的唯一代码是应用程序级代码,从 PHP 的外观来看。

    您的服务器加载的所有其他资产都应该位于公共目录中,这就是它被称为公共目录的原因,因为公众可以通过您的网络服务器的请求访问它。

    另一种方法是在项目的根目录下创建一个 js-source 目录,并让 Grunt 或 Gulp 等任务管理器编译并将 js 复制到您的公共目录中,如下所示:

    project-name/
      application/
        config/
        controllers/
        models/
        views/
      public/
        css/
        images/
        js/     <- is filled with js from js-source/ by grunt/gulp
        .htaccess
        index.php
      js-source/
        vendor/
        main.js  <- is uglified/concatinated & copied into public/js by grunt/gulp
    .htaccess
    

    参考链接:

    【讨论】:

    • 感谢您的回答,但是 Andy 提出的解决方案效果很好。
    • 不用担心,如果我不使用 Grunt 或 Gulp,我会按照 Andy 的建议进行操作。然而,我认为这是一个提出更现代替代方案的好机会,Gulp 和 Grunt 是我强烈建议您研究的很棒的工具,也许不在这个项目中,但也许在下一个项目中。
    【解决方案3】:

    您可以将您的 htaccess 从公共库复制到您的供应商库,这样它就会覆盖您的根目录 htaccess。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-22
      • 2011-03-22
      相关资源
      最近更新 更多