1

我在 error.log 中收到这些消息:

Request URL: /files/thumbs1/1354046882.jpg
Stack Trace:
#0 /path/to/web/app/webroot/index.php(92):     Dispatcher->dispatch(Object(CakeRequest), Object(CakeResponse))
#1 {main}
2013-05-08 13:44:16 Error: [MissingControllerException] Controller class     FilesController could not be found.
Exception Attributes: array (
  'class' => 'FilesController',
  'plugin' => NULL,
)

图像文件 /files/thumbs1/1354046882.jpg 存在并显示。但除此之外,我在 error.log 中得到错误。我在视图 .ctp 中手动生成 url,如下所示:

<img src="/files/thumbs1/1354046882.jpg" alt="">

我不使用 echo $this->Html->image('cake_logo.png', array('alt' => 'CakePHP'));

如何添加 ControllerException,以便 webroot 中的目录“文件”不被识别为控制器。我没有 FilesController。或者是否有可能,“文件”是 CakePHP 中不应使用的受保护词?到目前为止,在 CakeBook 中找不到相关的内容。

/webroot 中的 .htaccess

<IfModule mod_rewrite.c>
   RewriteCond %{HTTP_HOST} !www.domainname.com
   RewriteRule (.*)  http://www.domainname.com/$1 [R=301,L]
   RewriteCond %{REQUEST_FILENAME} !-d
   RewriteCond %{REQUEST_FILENAME} !-f
   RewriteRule ^(.*)$ index.php [QSA,L]
</IfModule>

我更新到 CakePHP 2.3。谢谢你的帮助。

4

2 回答 2

0

在您的 .htaccess 中添加一条规则,以便以 /files/ 开头的请求 url 不会路由到 index.php。

附带说明,尽量不要生成丢失文件的 url :)

于 2013-05-08T16:51:31.983 回答
0

如果我正确理解了所有内容,那么您唯一的问题就是没有编写正确的网址。

我将在这里假设一些事情:您的文件夹结构类似于

/app
    /Config
    /Console
    ...
    /webroot
        /files
/lib
/plugins
/vendors

你想要的是显示位于这个文件目录中的图像,对吧?

然后你需要确保你的路径是正确的。如果你不告诉 cake 你想要一个文件在你的 webroot 中,那么使用这种类型的 url

files/something/something-else

cake 只是会想“好的,这个路径是控制器/动作/参数(这是一个概括,显然这个假设可以用路由修改)”,并且因为文件不是控制器而失败。

因此,要解决此问题,每次您想指向 webroot 目录中的某些内容时,请将其添加到路径中。在你的情况下,它应该是

<img src="<?php echo $this->webroot; ?>files/thumbs1/1354046882.jpg" alt="">

如果文件存在,它应该显示没有错误。

于 2013-05-08T23:13:41.950 回答