首先,我加载主页并加载所有图像,这没关系。 但是当点击链接并调用另一个动作(查看动作)时,它的图像不会加载。
这是我的Images路径和view.ctp文件:
这是观看行动:
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);
}
答案 0 :(得分:3)
您对URL或常规文件系统中使用的相对路径和绝对路径缺乏了解。 让我从其他地方开始:
给你问题: 关于路径,您需要了解一些事项。 有绝对的路径。这些是从您的文件系统的根目录提供信息到您想要的点: 例如: /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函数并忘记路径问题。