【问题标题】:MVC - CSS linksMVC - CSS 链接
【发布时间】:2016-07-01 09:50:27
【问题描述】:

我对 Web 应用程序的整个 MVC 结构比较陌生。

这是我的项目的结构。

您在图片右侧看到的文件位于“Views”文件夹中。

当我要链接一个css文件时,为什么路径必须是href="/css/stylePortfolio.css"

为什么不是href="../../public/css/stylePortfolio.css"

【问题讨论】:

  • 你是如何引导这个的?
  • @Chay22 你到底是什么意思?
  • 因为你的站点根路径是 index.php 文件夹,当你有 CSS 文件夹时你的 public 文件夹。
  • 因为href属性是一个url,而不是文件路径。
  • @miceli 你能详细解释一下吗?什么是站点根路径?你是怎么设置的?这对整个结构有何影响?

标签: php html css model-view-controller


【解决方案1】:

您正在查看的是发送到用户浏览器的 HTML。浏览器对应用程序的结构一无所知。它只是读取href 链接,然后从http://example.com<link> 下载文件,例如<link>/css/main.css

如果配置正确,您网站的 web 根目录 位于您的 /public 文件夹中。这意味着,浏览器请求的任何内容都与您的网络根目录相关。因此,如果你想链接到一个 css 文件,你需要考虑相对于你的项目 web 根目录的链接,而不是相对于你的项目根目录

一个例子: 假设您在/home/user/AwesomePhpProject 中创建了一个新项目。 现在,/home/user/AwesomePhpProject 被称为您的项目根

在您的项目根目录中,您创建一个目录public。您可以使用 VirtualHost(使用 Apache 时)或 root 指令(使用 Nginx 时)将该目录配置为您的 Web 根目录/home/user/AwesomePhpProject/public 现在是您的网络根。 当浏览器请求/css/main.css 时,它将被定向到/css/main.css 相对 到您的Web 根目录。在我们的例子中,这将是/home/user/AwesomePhpProject/public/css/main.css

出于安全原因,大多数现代应用程序将项目和 Web 根目录分开。

【讨论】:

  • 感谢您的回答。我开始明白了。你能详细说明一下吗?例如:什么是网络根?什么是项目根?它们是如何分开的?
【解决方案2】:

由于您的index.php 位于公用文件夹中,因此所有视图都加载到公用文件夹中。这就是为什么您应该从公共根目录声明 CSS 路径的原因。如有必要,您可以修改路径。

在这种情况下,您可以使用 CSS 文件夹的路径声明一个全局变量常量您的主控制器

define('CSS_PATH', 'http://localhost/fab/public/css/');

现在像这样使用

<link rel="stylesheet" href="<?=CSS_PATH?>bootstrap.css">

【讨论】:

  • 当我这样做时,我收到错误Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://fab.app/fab.app/public/css/bootstrap.min.css".
  • 将此添加到您的.htaccess 并让我知道AddType text/css .css
  • 我做到了。没有不同。问题是路径不对。它应该是http://fab.app/fab.app/public/css/bootstrap.min.css,而应该是"http://fab.app/css/bootstrap.min.css
  • 解决了吗?如果没有,你能告诉我你在 PHP 中定义的那行吗?
  • 你是对的。我没有在 php.ini 中包含 http:// 部分的行。现在错误是您之前尝试解决的问题:Resource interpreted as Stylesheet but transferred with MIME type text/html: "http://fab.app/public/css/bootstrap.min.css" 所以路径是正确的,但它不会将其解释为 css。
【解决方案3】:

这是因为前端链接(如 CSS 和 JS)与您所在的当前文件是相对的。由于您的根位于 public 中,因此您必须从该目录指定 URL(您无法链接到根目录顶层的任何文件)。

【讨论】:

    【解决方案4】:

    Why is it not href="../../public/css/stylePortfolio.css"?

    因为 MVC 的入口点是公共文件夹中的 index.php。所以你所有的css和js链接都应该是相对于公共文件夹的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-05
      • 2017-01-01
      • 2018-07-24
      • 2013-06-12
      • 1970-01-01
      • 2013-01-13
      • 2023-03-12
      • 2014-01-27
      相关资源
      最近更新 更多