2013-05-01 109 views
5

我正在使用liipImagineBundle,并试图将过滤器直接应用到控制器中。liipImagineBundle动态过滤器

在文档中,我找到了两节介绍如何使用控制器中的liipImagineBundle。这一个https://github.com/liip/LiipImagineBundle#using-the-controller-as-a-service

public function indexAction() 
{ 
    // RedirectResponse object 
    $imagemanagerResponse = $this->container 
     ->get('liip_imagine.controller') 
      ->filterAction(
       $this->getRequest(), 
       'uploads/foo.jpg',  // original image you want to apply a filter to 
       'my_thumb'    // filter defined in config.yml 
    ); 

    // string to put directly in the "src" of the tag <img> 
    $srcPath = $imagemanagerResponse->headers->get('location'); 

    // .. 
} 

而且https://github.com/liip/LiipImagineBundle/blob/master/Resources/doc/filters.md#dynamic-filters

public function filterAction(Request $request, $path, $filter) 
{ 
$targetPath = $this->cacheManager->resolve($request, $path, $filter); 
if ($targetPath instanceof Response) { 
    return $targetPath; 
} 

$image = $this->dataManager->find($filter, $path); 

$filterConfig = $this->filterManager->getFilterConfiguration(); 
$config = $filterConfig->get($filter); 
$config['filters']['thumbnail']['size'] = array(300, 100); 
$filterConfig->set($filter, $config); 

$response = $this->filterManager->get($request, $filter, $image, $path); 

if ($targetPath) { 
    $response = $this->cacheManager->store($response, $targetPath, $filter); 
} 

return $response; 
} 

我测试如“使用控制器即服务”的指示和它的作品,我的问题是,我不知道如何访问过滤器设置来修改它。

liip_imagine: 
driver:    gd 
web_root:    %kernel.root_dir%/../web 
data_root:   %kernel.root_dir%/../web 
cache_mkdir_mode:  0777 
cache_prefix:   /media/cache 
cache:    web_path 
cache_clearer:  true 
data_loader:   filesystem 
controller_action: liip_imagine.controller:filterAction 
formats:    [] 
filter_sets: 
    my_thumb: 
     filters: 
      crop: { start: [0, 0], size: [200, 150] } 
    my_paste: 
     quality: 90 
     filters: 
      paste: { start: [30, 60], image: ../web/uploads/images/firma.jpg } 

第二,真的,我不明白他什么时候说“用自定义数据加载器...”。

在这个例子中,他只是从ImagineController类(Liip \ ImagineBundle \ Controller)修改方法filteraction()。我想知道如何动态修改该方法?例如从我的控制器indexAction()。

另外我已阅读此帖https://stackoverflow.com/questions/16166719/loading-your-custom-filters-with-liipimaginebundle其中@NSCoder表示“您可以使用内置过滤器并修改其配置。”但我不明白。

我一直在寻找几天,但我还没有找到一个从哪个例子开始。

回答

4

寻找更多一些,我发现另一个LiipImagineBundle主题(Use LiipImagineBundle to Resize Image after Upload?)已经帮我做什么,我想..

这里,我离开我使用动态应用过滤器

public function indexAction() 
{ 

    $container = $this->container; 

    # The controller service 
    $imagemanagerResponse = $container->get('liip_imagine.controller'); 

    # The filter configuration service 
    $filterConfiguration = $container->get('liip_imagine.filter.configuration'); 

    # Get the filter settings 
    $configuracion = $filterConfiguration->get('my_thumb'); 

    # Update filter settings 
    $configuracion['filters']['crop']['size'] = array(50, 150); 
    $configuracion['filters']['crop']['start'] = array(10, 10); 
    $filterConfiguration->set('my_thumb', $configuracion); 

    # Apply the filter 
    $imagemanagerResponse->filterAction($this->getRequest(),'uploads/images/logo.jpg','my_thumb'); 

    # Move the img from temp 
    $fileTemporal = new File('media/cache/my_thumb/uploads/images/logo.jpg'); 

    $fileTemporal->move('uploads/images/', 'mini-logo.jpg'); 

    #################################### 

} 
代码