passchn / cakephp-file-pool
CakePHP的FilePool插件
Requires
- php: >=8.1
- cakephp/cakephp: ^5.0
- passchn/cakephp-assets: ^0.5.2
- passchn/cakephp-vite: ^2.1
Requires (Dev)
- phpunit/phpunit: ^10.1
README
为您提供快速简单地将文件添加到实体的方法。
注意
这是对passchn/cakephp-assets插件的扩展。
功能
- 适用于任何实体的无配置FilePool小部件(通过ViewHelper)
- 可以在小部件内上传、排序、编辑或删除文件
- 支持拖放上传多个文件
- 您可以轻松控制访客是否可以上传、编辑或删除项目
- 英文和德文翻译
先决条件
按照passchn/cakephp-assets的安装指南操作,并确保插件在您的应用程序中正常工作。
安装
您可以使用composer将此插件安装到您的CakePHP应用程序中。
安装composer包的推荐方法是
composer require passchn/cakephp-file-pool
然后,加载插件
bin/cake plugin load FilePool
在您的AppView.php中加载助手
$this->loadHelper('FilePool.FilePool');
运行迁移
bin/cake migrations migrate --plugin FilePool
... 或者将迁移复制到您的应用程序的迁移文件中。
用法
在模板中使用FilePool助手针对任何实体
<?= $this->FilePool->forEntity( $entity, title: 'File Pool', allowUpload: true, allowEdit: $currentUser->canEditFiles(), ) ?>
定义关系
您可以在您的ExamplesTable中轻松定义与实体的关系
$this->hasMany('Downloads', ['foreignKey' => 'owner_id']) ->setConditions(['owner_source' => 'Examples']) ->setClassName('FilePool.FilePoolAssets');
… 然后在控制器中包含Downloads.Assets后,通过$example->downloads访问文件。
故障排除
小部件未渲染
如果小部件未显示,请确保您在模板的某个地方获取了脚本
<?= $this->fetch('script') ?>
您可以通过配置'FilePool.ViewBlock'来更改插件使用的外观块,例如在您的app.php中。
重要
脚本应在html的末尾获取。样式将通过JavaScript加载。
小部件收到403响应(CSRF)
小部件的客户端使用CakePHP的默认csrf cookie名称(csrfToken)和header名称(X-CSRF-Token)。
如果您没有更改配置,请检查是否已将CsrfProtectionMiddleware配置为将httponly设置为false。这是必要的,因为否则JavaScript将无法访问cookie
->add(new CsrfProtectionMiddleware([ 'httponly' => false, // ... ]))
注意:如果您更改这些设置,请确保在浏览器开发工具中删除旧的csrfToken cookie。否则,由于旧的cookie被设置为httponly且不会自动替换,更改可能不会立即生效。
贡献
欢迎您提交问题或拉取请求。
如果您在安装或使用插件时遇到问题,请告诉我,我将更新故障排除部分。