1

首先,我加载主页并加载所有图像,没关系。但是当单击链接并调用另一个操作(查看操作)时,它的图像不会加载。

这是我的图像路径和 view.ctp 文件:

webroot中的图像路径

它是视图动作:

public function view($id = NULL) 
{  
    $this->layout= false;  
    $post = $this->Post->read(NULL, $id);  
    if(isset($this->params['requested'])){  
        return $post;  
    }  
    $this->set('post',$post);  
}  
4

2 回答 2

4

不要对 PATHS 感到疯狂 :) 使用 CakePHP 方法并忘记它。

我以前也有同样的问题。

简单的方法是将所有图像存储在

/app/webroot/img

或任何子文件夹。

然后,使用 HTML 助手打印它们:

echo $this->Html->image("name_of_image.jpg", array("alt" => "alternative_text"));

有关如何使用图像助手的更多信息,请查看: http ://book.cakephp.org/2.0/en/core-libraries/helpers/html.html#HtmlHelper::image

您可以应用相同的规则来加载 CSS、JS 文件、创建链接...以正确的方式使用 CakePHP 函数而忘记路径问题。

于 2012-11-18T20:14:47.220 回答
3

您对 URL 或一般文件系统中使用的相对路径和绝对路径缺乏了解。让我从别的地方开始:

  1. 不要将图像放在 CSS 文件夹中。默认 cakephp 烘焙应用程序中已经以小写形式存在的 css 文件夹用于存储 CSS 文件。不多也不少。图像属于 webroot 目录中的“img”文件夹。
  2. 您应该始终对 url 以及 webroot 中的目录和文件使用完整的小写字母,无论它是不是蛋糕。这是因为大多数优秀的虚拟主机操作系统(如 Debian)都是基于 linux 的,这在大小写书写方面有所不同。唯一不这样做的操作系统是 Windows(据我所知)。我知道你在 Windows 上编码,这就是为什么你现在所有的乱码都能正常工作,但如果你把它放在某个地方,它通常是你正在处理的基于 Linux 的服务器,你可以重写一半的应用程序视图。
  3. 罗斯解决方案是正确的,但它与该列表的第一点冲突,它说将图像放在“img”目录中。对于路径,您应该始终使用 CakePHPs 内置解决方案。通过这种方式,您可以确保应用程序在任何时候都不会崩溃,即使您可以将其放在子目录中,或者将其托管在一些愚蠢的系统上,比如一些德国主机商的系统……这里没有名字。

给你的问题:关于路径,你需要了解一些事情。有绝对路径。它们提供了从文件系统根目录到您想要的位置的信息:例如:/var/www/somefolder/someapp/webroot/index.php (Linux) C:\www\somefolder\someapp\webroot\index。 php (视窗)

当您深入文件系统或在您可能甚至不知道您的绝对路径相对路径是“发明”的环境中时,为了使这更容易处理。假设您在上面指定的目录中,并且想要访问或包含应用程序的“Config/core.php”:../Config/core.php (Linux) ..\Config\core.php (Windows -这里没有什么特别的,除了斜杠是反斜杠)

这基本上是:回到“webroot”的父目录,在这种情况下是“/var/www/somefolder/someapp/”(Linux)和Windows“C:\www\somefolder\someapp\”。从那里我们将再次前进到“Config”文件夹,然后访问 core.php。

此架构也适用于 url。例如www.example.com/pages/imprint/。通常,服务器会在您的主机的 webroot 中搜索文件夹“页面”。在那里它会搜索一个文件夹“印记”。之后,根据您的服务器配置,它会在该文件夹中搜索“index.html”或“index.php”或您建议服务器用作索引文件的其他文件。或者它可以只输出文件夹的内容。

使用“[application]/webroot/”文件夹中的 .htaccess 文件,此行为将被重定向到 CakePHP 的 index.php 文件。Cake 正在分析 url 并检查是否有任何有效的控制器操作或路由,然后为它运行适当的代码。但!此规则不适用于 webroot 目录中的实际文件或文件夹。(查看 webroot 文件夹中的 htaccess 文件并在 google 中查找其中使用的命令)。这就是为什么如果您使用正确的语法,可以毫无问题地交付 css 文件。由于 CakePHP 对其 url 使用文件夹 url 语法,因此给出相对 url 是一个问题,因为它们大多数时候只适用于一个特定页面。例如/pages/imprint ../img/blabla.gif将返回 webroot 并显示特定图片,因为要使用的 url 将是“webroot/img/blabla.gif”。但是在同一个应用程序/products/view/1中,路径../img/blabla.gif最终会出现在不是实际文件的“webroot/products/img/blabla.gif”中,cakephp 会尝试处理它并它会失败,因为 url 无效。

我希望这会有所帮助。

多检查一下这些路径。了解这些对于编程至关重要,当时它对我帮助很大;)

问候 func0der

于 2012-11-18T18:18:32.903 回答