knplabs/media-exposer

此包已被废弃,不再维护。未建议替代包。

PHP的媒体路径/源解析库

dev-master 2012-04-24 15:48 UTC

This package is auto-updated.

Last update: 2022-09-23 13:38:06 UTC


README

Media Exposer 是一个PHP (5.3+) 库,它帮助您将媒体文件暴露给您的Web应用的客户端。

原理

当您开发一个Web应用时,您总是需要设置一个策略来向客户端提供您的媒体。这正是这个库试图帮助您解决的问题。

Exposer 是库的主要入口点。它负责为给定的媒体和选项返回正确的源或路径。为此,它遍历已注册的解析器以找到支持给定媒体和选项的第一个解析器。源或路径生成被委派给它。因此,当您想要设置一个Exposer时,首先要做的是注册解析器。当您注册一个解析器时,您会为其分配一个优先级。

所有解析器都实现了 Resolver 接口。它们表明它们是否支持给定的媒体和选项。但是,仅此接口还不够,所以适当的解析器还必须实现 SourceResolver 接口或 PathResolver(或两者都实现)。

快速示例

讨论够了,让我们试试。

例如,我们将使用以下简单的图像模型

<?php

class FooImage
{
    private $filename;

    public function getFilename()
    {
        return $this->filename;
    }
}

然后,我们创建一个相关的解析器

<?php

use MediaExposer\PathResolver,
    MediaExposer\SourceResolver;

class FooImageResolver implements PathResolver, SourceResolver
{
    /**
     * {@inheritDoc}
     */
    public function supports($media, array $options)
    {
        return $media instanceof FooImage;
    }

    /**
     * {@inheritDoc}
     */
    public function getPath($media, array $options)
    {
        return '/path/to/the/images/directory/' . $media->getFilename();
    }

    /**
     * {@inheritDoc}
     */
    public function getSource($media, array $options)
    {
        return '/media/foo/' . $media->getFilename();
    }

    /**
     * {@inheritDoc}
     */
    public function getSourceType($media, array $options)
    {
        return SourceResolver::TYPE_RELATIVE; // or SourceResolver::TYPE_ABSOLUTE
    }
}

最后,您可以在您的Exposer中注册它

<?php

use MediaExposer\Exposer;

$exposer = new Exposer('http://the-host');
$exposer->addResolver(new FooImageResolver(), 10);

第一个 Exposer 的参数称为 $baseUrl。如果需要生成带有相对 SourceResolver 实例的绝对URL,则此参数是必需的。如果是这样,它将被附加到解析器返回的相对源以将其转换为绝对。