2015-03-17 28 views
9

Fiddling xung quanh với Intervention 2.0 trong Laravel 5. Điều tôi muốn là thao tác hình ảnh (kích thước và cắt xén) và sử dụng Interventions Image Caching để lưu hình ảnh. Những gì tôi về cơ bản cố gắng đạt được là chức năng của tốt cũ (và không an toàn) timthumb.php.Laravel 5 can thiệp-image/can thiệp-cache: url/định tuyến linh hoạt

tôi bắt đầu sử dụng điều này như một ví dụ:

// 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')); 
}); 

Khi tôi tải một hình ảnh như vậy:

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

Nó hoạt động tốt.

Nhưng ... Trong trường hợp hình ảnh của tôi có thể được đặt trong các thư mục khác nhau (phụ), đôi khi nhiều cấp độ sâu. Chúng được duy trì trong CMS của tôi bởi các quản trị viên web của họ.

ví dụ:

  • file/images/image.jpg
  • file/images/tiêu đề/image.jpg
  • file/images/nền/màu/image.jpg
  • img/common/logo.png

Các url hình ảnh này được tải từ bản ghi bảng mysql.

Khi đó một ảnh tải:

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

Tuyến không hoạt động nữa. Sau khi tất cả, tệp, hình ảnhimages.jpg là tất cả các phân đoạn url và số tiền trong số chúng có thể khác nhau.

Url hình ảnh (Bold) nên được xử lý như một biến:

Route :: get ('man hinh/file/images/image.jpg', function ($ src = false)

Sau đó, tôi sẽ có thể vượt qua các thông số kích thước và cắt xén ngoài khóa học Vì chiều dài url img có thể khác nhau. Tôi giả sử tôi có thể chuyển các tham số với truy vấn như? W = 100 & h = 50 & c = true hoặc gì đó ?


Cập nhật

Khi tôi sử dụng một tham số truy vấn cho các url hình ảnh:

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"}}"/> 

này hoạt động.

+0

Có lẽ cách tốt nhất để giải quyết vấn đề này là sử dụng mod_rewrite (nếu bạn đang sử dụng Apache) và thực hiện như sau: RewriteRule^imager/([. *]) \. [Jpg | gif | png] $ imager? src = $ 1 –

+0

Tôi cũng đã thử nghiệm với dự án Laravel 4 cũ. Tôi đã thêm tất cả các đường dẫn và đường dẫn con vào phần đường dẫn trong tệp cấu hình imagecache. – ChainList

Trả lời

3

Thật đơn giản.Bạn chỉ cần nói với Laravel rằng tham số hình ảnh của bạn bao gồm các chữ cái, dấu gạch chéo, dấu gạch ngang, dấu gạch dưới và dấu chấm ('[A-Za-z0-9\/\.\-\_]+'), bởi vì theo mặc định, khung làm việc phù hợp với mọi thứ nhưng dấu gạch chéo /.

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\/\.\-\_]+'); 

Bạn có thể tìm hiểu thêm về ràng buộc tham số trong documentation.