【发布时间】:2017-09-13 18:31:33
【问题描述】:
我正在制作一个Silex 应用程序,它从数据库中获取随机图像,然后将其显示在网页上。但是在尝试显示图像时,我不断收到404 error。这是我的路由代码。
<?php
use Symfony\Component\HttpFoundation\{Request, Response};
$app->get('/{width}/{height}', function (Request $request, Silex\Application $app, $width, $height){
$image = $app['db']->fetchAssoc("SELECT filename FROM images ORDER BY rand() LIMIT 1");
$placeholder = $app['image']
->make(__DIR__.'/../public/img/' .$image['filename'])
->fit($width, $height)
->greyscale()
->response('png');
return new Response($placeholder, 200,[
'Content-Type' => 'image/png'
]);
})->assert('width', '[0-9]+')->assert('height', '[0-9]+ ');
因为我写的路线有宽度和高度,所以我需要在我的 url 后面加上宽度和高度,我不会收到这些错误。
但是一旦我添加了高度,比如说 400 和 400,我得到一个 404 错误页面
谁能提供帮助?
【问题讨论】:
-
您没有给出一个 404 的 URL 示例 - 考虑到问题有点相关 - 但这似乎是错误的:
assert('height', '[0-9]+ ')。您在该模式中有一个尾随空格。 -
错误表明您没有用于“GET /”请求的路由器。因此,您正在请求您的根文档 (
http://what.ever.com/),它转换为“/”路由。所以你需要添加对$app->get("/", function(...) { ...});的调用 -
当您在第一个和第二个屏幕截图上看到响应时,您会在浏览器的地址栏中看到哪些完整的 URL?现在看起来您可能正在使用 PhpStorm 自己的内置简单 Web 服务器......它并不适合用于为具有此类动态 URL 的站点提供服务。如果是这样 - 在第一个屏幕截图请求通过您的 Silex 应用程序时,由于您没有
/的路由,它会生成该错误。在第二次请求中,URL 可能根本无法通过网络服务器的初始路由逻辑......所以它永远不会到达您的 Silex 应用程序。更好地使用适当的 Apache/nginx 来提供网页 -
您是否启用了 URL 重写?
-
啊,对不起,伙计们没有包括对我来说非常愚蠢的 URL,但我现在将使用 url 更新图像.. url 末尾的 400/400 是两者的尺寸图片的高度和宽度。
标签: php url routes phpstorm silex