expstudio / lumen-stapler
Lumen 框架的简易文件上传管理。
Requires
- php: >=5.4.0
- expstudio/stapler: 2.0.*
- laravel/lumen-framework: 5.4.*
This package is not auto-updated.
Last update: 2024-09-18 20:38:50 UTC
README
Lumen-Stapler 是基于 Stapler 的文件上传包,适用于 Lumen 框架。它提供了一套完整的 Lumen 命令、迁移生成器以及基于 Stapler 包的级联包配置。它还使用非常合理的默认值引导 Stapler 与 Lumen 一起使用。如果您想使用 Stapler 与 Lumen 一起使用,强烈建议您使用此包。
Lumen-Stapler 由 Watee Wichiennit 创建。
需求
此包目前需要 php >= 5.4 以及 Lumen >= 5.4。如果您要在文件上传过程中执行图像处理,您还需要在您的 php 环境中安装 GD、Gmagick 或 Imagick(根据您的喜好)。
安装
Lumen-Stapler 以 composer 包的形式分发,这是在您的应用程序中使用它的方式。
使用 Composer 安装此包。编辑您项目中的 composer.json
文件,以要求 expstudio/Lumen-stapler
。
"require": { "laravel/lumen-framework": "5.4.*", "expstudio/lumen-stapler": "1.0.*" }
完成此操作后,最后一步是添加服务提供者。
对于 Lumen 5.4,打开 config/app.php
,并向提供者数组中添加一个新条目
$app->register(Expstudio\LumenStapler\Providers\LumenStaplerServiceProvider::Class);
-
在您的使用 Stapler 的模型中,将
use Codesleeve\Stapler\Stapler
更改为use Codesleeve\Stapler\ORM\EloquentTrait
。您的模型还需要实现Codesleeve\Stapler\ORM\StaplerableInterface
。 -
如果您已发布 stapler 的配置,则需要将配置文件夹的名称从
app/config/packages/expstudio/stapler
更改为app/config/packages/expstudio/lumen-stapler
。 -
现在,图像处理库通过 Imagine Image 包的完整类名引用(例如
gd
现在通过Imagine\Gd\Imagine
引用)。 -
在您的 s3 配置中,现在需要传递一个包含这些选项(以及您可能需要的任何其他选项)的单个 's3_client_config' 数组,而不是传递 'key'、'secret'、'region' 和 'scheme' 选项。这些选项将直接传递给 s3ClientFactory,以便在创建 S3 客户端时使用。将参数作为数组传递现在允许您根据需要配置您的 s3 客户端(对于给定的模型/附件)。参见:http://docs.aws.amazon.com/aws-sdk-php/guide/latest/configuration.html#client-configuration-options
-
在您的 s3 配置中,现在需要传递一个包含这些值的单个 's3_object_config' 数组,而不是传递 'Bucket' 和 'ACL'(这是由 S3Client::putObject() 方法使用的)。参见:http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.S3Client.html#_putObject
-
':Lumen_root' 插值已被更改为 ':app_root'
快速入门
在您应用程序的文档根目录中(最可能是公共文件夹),创建一个名为 system 的文件夹,并授予您的应用程序对该文件夹的写入权限。为此,我们假设存在一个现有的 User
模型,我们将向其中添加一个头像图像。
在您的模型中
use Codesleeve\Stapler\ORM\StaplerableInterface; use Codesleeve\Stapler\ORM\EloquentTrait; class User extends Eloquent implements StaplerableInterface { use EloquentTrait; // Add the 'avatar' attachment to the fillable array so that it's mass-assignable on this model. protected $fillable = ['avatar', 'first_name', 'last_name']; public function __construct(array $attributes = array()) { $this->hasAttachedFile('avatar', [ 'styles' => [ 'medium' => '300x300', 'thumb' => '100x100' ] ]); parent::__construct($attributes); } }
确保在您的模型中,在调用
parent::__construct()
之前正确调用hasAttachedFile()
方法。
从命令行,使用迁移生成器
php artisan stapler:fasten users avatar php artisan migrate
在您的新视图中
<?= Form::open(['url' => action('UsersController@store'), 'method' => 'POST', 'files' => true]) ?> <?= Form::input('first_name') ?> <?= Form::input('last_name') ?> <?= Form::file('avatar') ?> <?= Form::submit('save') ?> <?= Form::close() ?>
在您的控制器中
public function store() { // Create and save a new user, mass assigning all of the input fields (including the 'avatar' file field). $user = User::create(Input::all()); }
在您的显示视图中
<img src="<?= $user->avatar->url() ?>" > <img src="<?= $user->avatar->url('medium') ?>" > <img src="<?= $user->avatar->url('thumb') ?>" >
要解绑(重置)文件,只需将常量 STAPLER_NULL 赋值给附件并保存即可
$user->avatar = STAPLER_NULL; $user->save();
这将确保数据库表记录中相应的附件字段被清除,当前文件将从存储中删除。数据库表记录本身不会被销毁,可以正常使用(甚至在需要时可以分配新的文件上传)。
命令
固定
此包提供了一个 固定
命令,可用于为现有表生成迁移以添加图像文件字段。此命令的签名如下:php artisan stapler:fasten <tablename> <attachment>
在上面的快速入门示例中,调用 php artisan stapler:fasten users avatar
然后调用 php artisan migrate
将以下字段添加到用户表中
- (字符串) avatar_file_name
- (整数) avatar_file_size
- (字符串) avatar_content_type
- (时间戳) avatar_updated_at
刷新
可以使用 刷新
命令重新处理模型附件上的已上传图像。它通过在模型的每个附件上(或仅针对特定附件)调用 reprocess() 方法来实现。当已为该附件上传文件时,这对于向现有附件添加新样式非常有用。
重新处理 ProfilePicture 模型的所有附件:php artisan stapler:refresh ProfilePicture
仅重新处理 ProfilePicture 模型上的照片附件:php artisan stapler:refresh TestPhoto --attachments="photo"
重新处理 ProfilePicture 模型的附件列表:php artisan stapler:refresh TestPhoto --attachments="foo, bar, baz, etc"
故障排除
在提交问题或创建拉取请求之前,请查看 Stapler 包的 故障排除部分。有很大可能性,您在这个包中遇到的问题与基础 Stapler 包相关,并且已经在那里得到了解决。
贡献
此包始终欢迎贡献
- 主分支将始终包含最新的工作(错误修复、新功能等),但它可能并不总是稳定的;自行承担风险。每个新标签发布都将来自主分支上的工作,一旦事情稳定,等等。