wolfpack-it / yii2-glide
Yii2 Glide 集成
1.0.0
2021-01-15 10:14 UTC
Requires
- php: >=7.2.0
- creocoder/yii2-flysystem: ^1.0.0
- league/glide: ^1.7
- yiisoft/yii2: ~2.0.19
This package is auto-updated.
Last update: 2024-09-15 18:41:04 UTC
README
此扩展为 Yii2 框架提供了 Glide 集成。
Glide 是一个使图像服务和处理变得非常容易的包。利用 Flysystem,它还从文件系统中抽象出来。
安装
安装此扩展的首选方式是通过 composer。
运行
$ composer require wolfpack-it/yii2-glide
或者将以下内容添加到你的 composer.json
文件的 require
部分。
"wolfpack-it/yii2-glide": "^<latest version>"
配置
文件系统
第一步是配置文件系统。有三个
- 源文件系统(必需)
- 缓存文件系统(必需)
- 水印文件系统(可选)
每个文件系统都可以配置为组件或直接在容器中。
组件示例
'components' => [ 'glideSource' => [ 'class' => \creocoder\flysystem\LocalFilesystem::class, 'path' => '</path/to/source-storage>' ], ]
组件
配置的文件系统可以在 Glide 配置中使用
'container' => [ 'definitions' => [ \WolfpackIT\glide\components\Glide::class => [ 'class' => \WolfpackIT\glide\components\Glide::class, 'source' => 'glideSource', // via component 'cache' => [ 'class' => \creocoder\flysystem\LocalFilesystem::class, 'path' => '</path/to/cache-storage>' ], // via configuration 'watermarks' => \creocoder\flysystem\AwsS3Filesystem:class // via container ] ] ]
控制器操作
首选用法是在控制器动作方法中的操作
class GlideController extends yii\web\Controller { /** * @return array */ public function actions(): array { return ArrayHelper::merge( parent::actions(), [ 'index' => [ 'class' => \WolfpackIT\glide\actions\GlideAction::class ] ] ); } }
安全
为了保护你的服务器免受试图调整大量图像的攻击,保护 URL 是一个好的主意。用于此的软件包是 Sam-ITs Url Signer。它使用过期时间签名 URL,并且可以在你不希望任何人更改图像时锁定参数。
它不包含在包中,因为它很容易配置
签名配置
'container' => [ 'definitions' => [ \SamIT\Yii2\UrlSigner\UrlSigner::class => [ 'secret' => '<secret>', ], ] ]
控制器中的 HMAC 过滤器
class GlideController extends yii\web\Controller { /** * @return array */ public function behaviors(): array { return ArrayHelper::merge( [ HmacFilter::class => [ 'class' => HmacFilter::class, 'signer' => \Yii::$container->get(\SamIT\Yii2\UrlSigner\UrlSigner::class) //via Dependancy Injection 'signer' => $this->controller->module->get('<urlSignerComponent>') // via component ] ], parent::behaviors() ); }
签名 URL
$urlSigner = \Yii::createObject(\SamIT\Yii2\UrlSigner\UrlSigner::class); $url = [ '/img/index', // NOTE: This must be the route from the root 'path' => '</path/to/image>' ]; $allowAddition = true; // Whether or not to allow image modifications after url generation $expiration = new DateTime())->add(new DateInterval('P7D')); $urlSigner->signParams( $url, $allowAddition, $expiration ); echo yii\helpers\Url::to($url, true);
第二种安全方法
上面提到的包需要过期时间,这意味着每次生成 URL 时都会是唯一的。这导致客户端缓存出现问题。因此,已经添加了另一种方法,尽管它的实现方式略逊一筹,但允许非过期链接。更多信息请查看 这里。
签名配置
请确保密钥是安全的,因为使用的散列是 MD5。
'container' => [ 'definitions' => [ \League\Glide\Signatures\Signature::class => function(\yii\di\Container $container) { return \League\Glide\Signatures\SignatureFactory::create('<secret>'); }, \League\Glide\Urls\UrlBuilder::class => function(\yii\di\Container $container) { return new \League\Glide\Urls\UrlBuilder('', $container->get(\League\Glide\Signatures\Signature::class)); }, ] ]
控制器中的签名过滤器
class GlideController extends yii\web\Controller { /** * @return array */ public function behaviors(): array { return ArrayHelper::merge( [ SignatureFilter::class => [ 'class' => SignatureFilter::class, ] ], parent::behaviors() ); } }
签名 URL
$urlBuilder = \Yii::createObject(\League\Glide\Urls\UrlBuilder::class); $url = [ '/img/index', // NOTE: This must be the route from the root 'path' => '</path/to/image>', ]; $options = [ 'w' => 1000, ]; echo $urlBuilder->getUrl(Url::to($url), $options);
待办事项
- 添加测试
鸣谢
许可证
MIT 许可证 (MIT)。更多信息请参阅 LICENSE。