2017-04-18 73 views
2

我正在製作一個Silex應用程序,該應用程序從數據庫中獲取隨機圖像,然後將其顯示在網頁上。但試圖顯示圖像時,我仍然收到404 error。這是我的路由代碼。Silex幫助。任何人都可以解釋爲什麼我在這裏得到一個404錯誤?

<?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]+ '); 

因爲我寫了一個路線具有寬度和高度,我需要把寬度和高度我的網址後,我沒有得到這些錯誤。

Errors page

但後來有一次我做補充的高度可以說,400和400,我得到一個404錯誤頁面

404 Page

誰能提供幫助?

+0

你不給被404ing一個URL的一個例子 - 有點相關的問題 - 但這似乎是錯誤的:'assert('height','[0-9] +')'。你在這種模式下有一個尾隨空間。 –

+0

錯誤是指出您沒有用於「GET /」請求的路由器。所以你要求你的根文件('''http:// what.ever.com /''')轉換爲「/」路由。所以你需要給'''app-> get(「/」,function(...){...})添加一個調用;''' – mTorres

+2

當瀏覽器的地址欄中顯示的是什麼完整的URL你看到第一個和第二個截圖的迴應?現在看起來您可能正在使用PhpStorm自己的內置簡單網絡服務器......這並不適合用於爲具有這種動態網址的網站提供服務。如果是這樣 - 在第一個屏幕截圖請求通過您的Silex應用程序,並且因爲您沒有'/'的路由它會產生該錯誤。在第二次請求時,URL可能無法通過網絡服務器的初始路由邏輯......所以它永遠不會到達您的Silex應用程序。更好地使用適當的Apache/nginx來提供網頁 – LazyOne

回答

0

因爲你的404是nginx的,而不是從硅石我會假設你已經忘了讓您的web服務器上的網址重寫(在你的情況下,它的nginx)

我也看到了,這個片段從https://www.codecourse.com/lessons/build-a-placekitten-clone

作者展示瞭如何啓用重寫在03:36(https://www.codecourse.com/lessons/build-a-placekitten-clone/1482) 但只爲Apache Web服務器,而不是nginx的

詳情請參閱https://silex.sensiolabs.org/doc/2.0/web_servers.html#nginx如何配置nginx的

UPDATE:

我想你可以測試你的圖像生成,看看它在/index.php/400/400工作,但對更清潔的URL,你需要重寫

相關問題