2015-03-17 11 views
9

Laravel 5'te Intervention 2.0 ile uğraşmak istediğim şey görüntüleri (boyut ve kırpma) işlemek ve görüntüleri önbelleğe almak için Image Caching Müdahaleleri kullanmaktır. Temel olarak elde etmeye çalıştığım şey, iyi eski (ve güvensiz) timthumb.php'un işlevselliğidir.Laravel 5 müdahale-görüntü/müdahale-önbellek: esnek url/yönlendirme

Ben bir örnek olarak bu kullanmaya başladı:

// routes.php 
Route::get('imager/{src?}', function ($src) 
{ 
    $cacheimage = Image::cache(function($image) use ($src) { 
     return $image->make("files/image/".$src)->resize(100,50); 
    }, 10, true); 

    return Response::make($cacheimage, 200, array('Content-Type' => 'image/jpeg')); 
}); 
ben şöyle bir resim yüklemek: Düzgün çalışır

// template 
<img src="{{"imager/image.jpg"}}"/> 

.

Ancak ... Durumumda görüntüler farklı alt dizinlerde, bazen birden çok düzeyde derinlerde bulunabilir. CMS'mde web yöneticileri tarafından tutuluyorlar.

örnekler:

  • dosyaları/images/image.jpg
  • dosyaları/images/başlıklar/image.jpg
  • dosyaları/images/arka plan/renk/image.jpg
  • img/common/logo.png

Bu resim URL'leri bir mysql tablo kaydından yüklenir.

zaman böyle bir görüntü yükler:

// template 
<img src="{{"imager/files/images/image.jpg"}}"/> 

rota artık çalışmıyor. Sonuçta, dosyaları,görüntüleri ve images.jpg Bunların miktarı farklı olabilir tüm url segmentleri ve bulunmaktadır.

Rota :: olsun ('görüntüleyici/dosyaları/images/image.jpg', function ($ src = false)

:

(Kalın) görüntü url bir değişken olarak ele alınmalıdır

Öyleyse, boyutlandırma ve kırpma parametrelerini kapatabilirim çünkü img url uzunluğu değişebileceğinden, parametreler? W = 100 & h = 50 & h = true veya bir


Güncelleme

Ben görüntü url için bir sorgu parametresi kullanın:

Route::get('imager', function() 
{ 
    $src = Input::get('src', 1); 

    $cacheimage = Image::cache(function($image) use ($src) { 
     return $image->make($src)->resize(100,100); 
    }, 1, false); // one minute cache expiry 

    return Response::make($cacheimage, 200, array('Content-Type' => 'image/jpeg')); 
}); 

// template 
<img src="{{"imager?src=files/images/image.jpg"}}"/> 

Bu çalışır.

+0

Belki de bununla baş etmenin en iyi yolu mod_rewrite (Apache üzerindeyseniz) kullanmak ve şu gibi bir şey yapmaktır: RewriteRule^imager/([. *]) \. [Jpg | gif | png] $ imager? src = $ 1 –

+0

Eski bir Laravel 4 projesinde de bu probleme sahiptim. Tüm yolları ve alt yolları, imagecache yapılandırma dosyasındaki yollar bölümüne ekledim. – ChainList

cevap

3

Bu basittir.Sadece Laravel'e görüntü parametrenizin harf, çizgi, çizgi, alt çizgi ve noktadan ('[A-Za-z0-9\/\.\-\_]+') oluştuğunu söylemelisiniz, çünkü varsayılan olarak çerçeve, / eğik çizgisiyle aynıdır.

Route::get('imager/{image?}', function($src) { 

    $cachedImage = Image::cache(function($image) use ($src) { 
     return $image->make($src)->resize(100,100); 
    }, 1, false); 

    return Response::make($cachedImage, 200, ['Content-Type' => 'image/jpeg']); 
})->where('image', '[A-Za-z0-9\/\.\-\_]+'); 

Sen documentation bağlanma parametresi hakkında daha fazla bilgi bulabilirsiniz.