2015-03-17 11 views
9

लार्वेल 5 में Intervention 2.0 के साथ फ़िडलिंग 5. मैं चाहता हूं कि छवियों (आकार और फसल) में हेरफेर करना और छवियों को कैश करने के लिए हस्तक्षेप Image Caching का उपयोग करना है। जो मैं मूल रूप से हासिल करने की कोशिश करता हूं वह अच्छी पुरानी (और असुरक्षित) की कार्यक्षमता है timthumb.phpलैरवेल 5 हस्तक्षेप-छवि/हस्तक्षेप-कैश: लचीला यूआरएल/रूटिंग

मैं एक उदाहरण के रूप में इस का उपयोग शुरू किया:

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

जब मैं इतना की तरह एक छवि को लोड:

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

यह ठीक काम करता है।

लेकिन ... मेरी स्थिति में छवियां अलग-अलग (उप) निर्देशिकाओं में स्थित हो सकती हैं, कभी-कभी कई स्तर गहरे होते हैं। वे अपने सीएमएस में अपने वेबमास्टर्स द्वारा बनाए रखा जाता है।

उदाहरण:

  • फ़ाइलें/images/image.jpg
  • फ़ाइलें/images/हेडर/image.jpg
  • फ़ाइलें/images/पृष्ठभूमि/रंग/image.jpg
  • img/common/logo.png

ये छवि यूआरएल एक mysql तालिका रिकॉर्ड से लोड की गई हैं।

जब इस तरह के एक छवियों भार:

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

मार्ग अब और काम नहीं कर रहा। सब के बाद, फ़ाइलों, छवियों और images.jpg सभी यूआरएल खंडों और उनमें से राशि अलग हो सकता है।

मार्ग :: ('इमेजर/फ़ाइलें/images/image.jpg', समारोह ($ src मिल = false)

:

चित्र url (बोल्ड) एक चर के रूप में संभाला जाना चाहिए

तो मुझे आकार के आकार और फसल पैरामीटर को पारित करने में सक्षम होना चाहिए। क्योंकि आईएमजी यूआरएल लंबाई अलग-अलग हो सकती है, मुझे लगता है कि मैं पैरामीटर को एक क्वेरी के साथ पास कर सकता हूं जैसे w = 100 & एच = 50 & सी = सत्य या कुछ


अद्यतन

जब मैं छवि यूआरएल के लिए एक क्वेरी पैरामीटर का उपयोग:

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

यह काम करता है।

+0

शायद इससे निपटने का सबसे अच्छा तरीका mod_rewrite (यदि आप अपाचे पर हैं) का उपयोग करके है और कुछ ऐसा करें: RewriteRule^imager/([। *]) \। [Jpg | gif | png] $ imager? src = $ 1 –

+0

मेरे पास यह पुरानी लैरवेल 4 प्रोजेक्ट के साथ भी यह समस्या थी। मैंने imagecache कॉन्फ़िगरेशन फ़ाइल में पथ अनुभाग में सभी पथ और उप-पथ जोड़े। – ChainList

उत्तर

3

यह आसान है।आपको केवल लारवेल को बताना होगा कि आपके छवि पैरामीटर में अक्षर, स्लैश, डैश, अंडरस्कोर और डॉट ('[A-Za-z0-9\/\.\-\_]+') शामिल हैं, क्योंकि डिफ़ॉल्ट रूप से ढांचा सबकुछ मेल खाता है लेकिन स्लैश /

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

आप documentation में पैरामीटर बाध्यकारी के बारे में अधिक जानकारी प्राप्त कर सकते हैं।

संबंधित मुद्दे