passchn/cakephp-assets

CakePHP 的资产管理插件

安装次数: 945

依赖项: 1

建议者: 0

安全: 0

星标: 2

关注者: 2

分支: 1

开放问题: 1

类型:cakephp-plugin

v0.5.2 2023-10-16 19:59 UTC

README

插件的功能

此插件帮助您管理后端资产,这些资产可以是任何文件类型。资产保存在非公开文件夹中,并由 AssetsTable 处理。

您可以使用具有有用方法的 AssetEntities

通用方法

  • 检查上传的文件是否仍然存在: $asset->exists() // true 或 false
  • $asset->getFileSizeInfo() 打印一个可读的文件大小。
  • 获取 AssetsController::download() 的链接(带有 Admin 前缀): $asset->getDownloadLink()

图像渲染

  • 调用 echo $asset->getImage()->scaleWidth(350)->toWebP()->addCSS('my-class') 以将 WebP 缩略图作为 HTML 渲染。
  • 渲染的图像将保存在 webroot/img/modified 中,具体取决于修改和传递的选项。
  • 通过 ImageAsset::applyFilter() 传递您的自定义 InterventionImage 过滤器
  • 您可以通过 ImageAsset::modify() 调用任何 InterventionImage API 方法

CSV 预览

  • 您可以使用 TextAssetPreviewHelper 来渲染 CSV 文件的表格。
  • 遍历 csv-Asset 中的行: foreach ($asset->getReader()->getRecords() as $row) ...

任何模型的旁证属性

  • $asset 可以是 $user->image$company->logo 或您最新的 CSV 导入。只需在您的模型上配置一个 belongsTo 关系并设置 ClassName 即可。

安装

您可以使用 composer 将此插件安装到您的 CakePHP 应用程序中。

安装 composer 包的推荐方法是

composer require passchn/cakephp-assets

加载插件

 bin/cake plugin load Assets

运行迁移以创建插件表

bin/cake migrations migrate -p Assets

现在您应该在数据库中有一个 assets_assets 和一个 assets_phinxlog 表。

有问题吗?请查看 此演示应用程序单个提交,了解如何设置插件。

CakePHP 版本映射

此插件还没有版本 1。要在项目中使用它,请检查版本映射

上传文件

AssetsController

您可以直接使用 AssetsController 上传文件。默认情况下,您可以通过 Admin 前缀访问索引、查看和编辑方法: your-app.test/admin/assets/assets

使用旁证名称

您可以使用 Assets 表从任何模型上传文件,例如,您有一个 users 表并需要一个用户图像

  1. users 表中创建一个 userimage_id 字段,作为可空的 char(36) (UUID)。
  2. 运行迁移: bin/cake bake users
  3. 现在您需要告诉 CakePHP,您的 Userimage 不是一个真正的实体,而是来自 Assets.AssetsTable
in \App\Model\Table\Users: 

$this->belongsTo('Userimages')
    ->setForeignKey('userimage_id')
    ->setClassName('Assets.Assets');

这不再有效。从版本 2.8 开始的 cakephp-bake 插件似乎检测到您实际上没有 userimages 表,并且不会假设一个 belongsTo 关系。您必须自己编写代码或降级到版本 2.7

现在您可以在 templates/Users/edit.php 中放置一个用于 Userimage 的上传字段

<?= $this->Form->create($user, ['type' => 'file']) ?>
    ...
    ...
    <?= $this->Form->control('userimage.filename', [
        'type' => 'file', 
        'label' => 'Upload a profile photo',
    ]) ?>
    ...
<?= $this->Form->end() ?>

为了使此操作正常工作,关系应该设置正确,例如通过 bin/cake bake users,这样 CakePHP 就知道您的 $user->userimage 是一个 Asset 实体。请注意,您必须在控制器或表的查找方法中包含 Userimages

$users = $this->Users->find()->contain([
        'Userimages',
        'Addresses,
        '...
    ]);
    
$image = $users->first()->userimage?->getImage();

AssetsTable不知道上传的文件属于哪个模型。您可以使用titledescriptioncategory字段来跟踪。

为此,您可以将自定义行为注入到AssetsTable中,以挂钩事件处理器(例如,在beforeSave()上设置title),或者创建自定义查找方法,例如通过您定义的分类。

在您的配置文件app.phpapp_local.phpapp_assets.php中,您可以覆盖默认设置并添加自定义行为。

文件操作

图片

如果资产是图片(MIME类型以image/*开头),您可以调用

$asset->getImage(); 

这返回一个Assets\Utilities\ImageAsset类的实例,它提供了对ImagineImage的包装API。

例如,您可以调用

echo $asset->getImage()->scaleWidth(350)->toWebP()->getPath()

这将生成原始文件的缩放版本,转换为WebP,并返回文件相对于/webroot的路径。

您可能希望直接输出HTML

<?= $asset->getImage()->scaleWidth(520)->toJpg()->setCSS('my-class') ?>

这将调用ImageAsset::__toString()方法,并将返回包含您设置的class、具有资产标题的alt参数以及正确的widthheight参数的HTML。

图像操作通过Intervention使用GD作为默认,但您可以通过app.php配置启用imagick。

<picture>元素的渲染

AppView.php中加载PictureHelper

$this->loadHelper('Assets.Picture');

在模板中,将ImageAsset以及包含宽度和参数的数组传递给Helper

<?= $this->Picture->webp(
    $user->photo->modify('resize', 350, 600),
    [150, 350],
    [
        'class' => 'user-img',
        'width' => 350,
        'height' => 600,
        'sizes' => "(min-width: 230px) 100vw, (min-width: 640px) 50vw"
    ]
) ?>

反馈、错误报告和功能请求

从一开始,这个插件就不是插件,我们现在正在努力使它在不同的CakePHP安装中可用。

由于这个包作为插件处于早期开发阶段,我们目前不期望它适用于许多用例。

如果您对该插件有任何疑问或问题,请在GitHub上创建一个Issue。

您也可以通过以下电子邮件联系我:post@pascalschneider.eu

此插件使用的包

除了CakePHP之外,该插件还依赖于以下包

"josegonzalez/cakephp-upload": "^6.0",
"league/csv": "^9.8",
"nette/utils": "^3.2 || ^4.0",
"intervention/image": "^2.7"