调用动作时无法在cakephp中加载图像文件

时间:2012-11-18 14:46:05

标签: image cakephp cakephp-2.1

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

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

Images Path in 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);  
}  

2 个答案:

答案 0 :(得分:3)

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

  1. 不要将图像放在CSS文件夹中。在默认的cakephp烘焙应用程序中已经以小写形式出现的css文件夹用于存储CSS文件。没有更多,也没有更少。图像属于webroot目录中的“img”文件夹。
  2. 你应该总是使用完整的小写作为网址和webroot中的目录和文件,不管它是不是蛋糕。这是因为像Debian这样的大多数优秀的webhosting操作系统都是基于linux的,这对大写和小写的写作都有所不同。唯一没有这样做的操作系统是Windows(据我所知)。我知道你在Windows上进行编码这就是为什么所有你搞砸的代码现在都可以工作,但是如果你把它放在某个地方它通常是你正在处理的基于Linux的服务器,你可以重写一半的appliation视图。
  3. Ross解决方案是正确的,除了它与此列表的第一点冲突,它说将图像放在“img”目录中。您应该始终对路径使用CakePHP内置解决方案。通过这种方式,您可以确保应用程序在任何时候都不会崩溃,即使您可以将其放在子目录中,也可以将其托管在某些愚蠢的系统上,例如来自德国某些托管商的系统......此处没有名称。
  4. 给你问题: 关于路径,您需要了解一些事项。 有绝对的路径。这些是从您的文件系统的根目录提供信息到您想要的点: 例如: /var/www/somefolder/someapp/webroot/index.php (Linux) C:\ www \ somefolder \ someapp \ webroot \ index.php (Windows)

    为了使你在文件系统或环境中更加容易处理,你可能甚至不知道你的绝对路径相对路径是“发明的”。 假设您在上面指定的目录中,并且想要访问或包含应用程序的“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。

    此架构也适用于网址。 例如。 www.example.com/pages/imprint / 。通常,服务器会在您的主机的webroot中搜索文件夹“pages”。在那里它会搜索文件夹“imprint”。然后,根据您的服务器配置,它将在该文件夹中搜索“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并显示具体图片,因为要使用的网址是“webroot / img / blabla.gif”。但在同一个应用 / products / view / 1 中,路径 ../ img / blabla.gif 最终会出现在“webroot / products / img / blabla.gif”中这不是一个实际的文件,cakephp会尝试处理它,它会因为url无效而失败。

    我希望这会有所帮助。

    多检查这些路径。理解这些对于编程是必不可少的,当时它对我帮助很大;)

    问候 func0der

答案 1 :(得分:3)

不要对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函数并忘记路径问题。