digitalkaoz/gaufrette-browser-bundle

此包提供了KnpMenu库的集成

0.3.0 2014-11-17 16:06 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:45:08 UTC


README

Build Status Total Downloads Latest Stable Version Code Coverage Scrutinizer Quality Score SensioLabsInsight

此包允许您像浏览Doctrine连接一样浏览Gaufrette文件系统。它试图将Doctrine ObjectRepositories和Entities包装在Gaufrette文件周围。

安装

使用Composer安装它

{
    "require" : {
        "digitalkaoz/gaufrette-browser-bundle" : "dev-master@dev"
    }
}

在您的Kernel中激活Bundle

// application/AppKernel.php
public function registerBundles()
{
  return array(
      // ...
      new rs\GaufretteBrowserBundle\rsGaufretteBrowserBundle(),
      // ...
  );
}

导入路由

rs_gaufrette_browser:
    resource: "@rsGaufretteBrowserBundle/Resources/config/routing.xml"
    prefix:   /gaufrette/browser

配置

创建一个Gaufrette文件系统(有关更多安装和配置信息,请参阅https://github.com/KnpLabs/KnpGaufretteBundle

knp_gaufrette:
    adapters:
        default:
            local:
                directory: /your/path/
    filesystems:
        default:
            adapter:    default
            alias:      default_filesystem

    stream_wrapper: ~

将浏览器连接到文件系统

rs_gaufrette_browser:
    filesystem: default_filesystem #the gaufrette filesystem alias to use

完整的配置参考

rs_gaufrette_browser:
    file_pattern:    "/\.(jpg|gif|jpeg|png)$/"    # a valid regular expression to filter for file-extensions
    filesystem:      default_filesystem           # the gaufrette filesystem alias to use
    file_class:      Your\File\Class              # should extend rs\GaufretteBrowserBundle\Entity\File
    directory_class: Your\Directory\Class         # should extend rs\GaufretteBrowserBundle\Entity\Directory

使用方法

转到http://your.domain/gaufrette/browser并浏览文件系统

查询目录或文件

使用存储库实现

$this->get('rs_gaufrette_browser.repository.directory')->findBy(array('prefix'=>'/foo')); #only search folders that starts with /foo
$this->get('rs_gaufrette_browser.repository.file')->findBy(array('suffix'=>'/\.xls/')); #only search .xls files
$this->get('rs_gaufrette_browser.repository.file')->find('/foo/bar.png'); #find one file
$this->get('rs_gaufrette_browser.repository.file')->findOneBy(array('prefix'=>'/foo', 'suffix' => '/\.xls/')); #find one file named /foo/*.xls

使用参数转换器

使用参数转换器为DirectoryFile非常简单

/**
 * @ParamConverter("folder", class="rs\GaufretteBrowserBundle\Entity\Directory", options={"id" = "slug"})
 */
public function myCustomDirectoryAction(Request $request, Directory $folder){}

/**
 * @ParamConverter("file", class="rs\GaufretteBrowserBundle\Entity\File", options={"id" = "slug"})
 */
public function myCustomFileAction(Request $request, File $file){}

钩入事件

控制器-操作中的所有内容都是使用事件构建的。

以下事件存在

final class GaufretteBrowserEvents
{
    const DIRECTORY_SHOW = 'gaufrette.directory.show';
    const DIRECTORY_INDEX = 'gaufrette.directory.index';

    const FILE_SHOW = 'gaufrette.file.show';
    const FILE_INDEX = 'gaufrette.file.index';
}

将自定义功能挂钩到默认控制器

实现订阅者

class MyEventSubscriber implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return array(
            GaufretteBrowserEvents::DIRECTORY_INDEX => 'myCustomAction'
        );
    }

    public function myCustomAction(DirectoryControllerEvent $event)
    {
        $event->addDirectory($myCustomDirectory);
        $event->removeDirectory($unwantedDirectory);

        $event->addTemplateData('myCustomVar', 'foobar');
    }
}

并为服务添加标签

<service id="my.custom.event_subscriber" class="\MyEventSubscriber">
    <tag name="kernel.event_subscriber" />
</service>

测试

所有内容都进行了单元测试

phpunit

查看Travis上的构建:https://travis-ci.org/digitalkaoz/GaufretteBrowserBundle

待办事项