eichgi / laravel-stapler
为Laravel框架提供简单的文件上传管理。
Requires
- php: >=5.4.0
- eichgi/stapler: 1.*
- laravel/framework: 4.*|5.*
This package is not auto-updated.
Last update: 2024-10-03 13:18:45 UTC
README
Laravel-Stapler 是一个基于 Stapler 的文件上传包,适用于 Laravel 框架。它提供了一套完整的 Laravel 命令、迁移生成器以及基于 Stapler 包的级联包配置。它还通过非常合理的默认值启动 Stapler 以配合 Laravel 使用。如果您想使用 Stapler 与 Laravel 一起使用,强烈建议您使用此包来实现。
Laravel-Stapler 由 Travis Bennett 创建。
要求
此包目前需要 php >= 5.4 以及 Laravel >= 4,最高至 5.4(5.4 是此包将正式支持的 Laravel 最后一个版本)。由于最近 Eloquent 中引入的不一致/变化,以及 Laravel 现在自带 Disks/Flysystem 支持,我决定不尝试维护此包以支持 Laravel 的未来版本。由于一些人已经在他们的 Laravel > 5.4 项目中使用它,因此我没有添加 Laravel <= 5.4 的硬性要求。如果您想在 Laravel 的新版本中使用此包,请自行承担风险。
如果您将在文件上传过程中进行图像处理,还需要安装 GD、Gmagick 或 Imagick(您自己的偏好)作为 PHP 环境的一部分。
安装
Laravel-Stapler 以 composer 包的形式发布,这是在您的应用程序中使用它的方式。
使用 Composer 安装包。编辑您项目的 composer.json
文件,以要求 codesleeve/laravel-stapler
。
"require": { "laravel/framework": "4.*", "codesleeve/laravel-stapler": "1.0.*" }
此操作完成后,最后一步是添加服务提供者。
对于 Laravel 4,打开 app/config/app.php
,并在提供者数组中添加一个新条目
'Codesleeve\LaravelStapler\Providers\L4ServiceProvider'
对于 Laravel 5,打开 config/app.php
,并在提供者数组中添加一个新条目
'Codesleeve\LaravelStapler\Providers\L5ServiceProvider'
弃用
截至 1.0.04 版本,'Codesleeve\LaravelStapler\LaravelStaplerServiceProvider' 服务提供者已被弃用(此提供者将在下一个主要版本中删除)。相反,您现在应该使用您正在使用的 Laravel 版本的相应服务提供者。
migrating-from-Stapler-v1.0.0-Beta4
如果您已在 Laravel 应用程序中使用 Stapler(v1.0.0-Beta4 之前),您现在需要使用此包。卸载 Stapler(从 composer.json 中删除它,删除服务提供者等),然后按照上述说明安装此包。安装完成后,可能需要在应用程序中进行以下更改
-
在您的模型中使用 Stapler 的模型中,将
use Codesleeve\Stapler\Stapler
更改为use Codesleeve\Stapler\ORM\EloquentTrait
。您的模型还需要实现Codesleeve\Stapler\ORM\StaplerableInterface
。 -
如果您已发布 Stapler 的配置,需要将配置文件夹从
app/config/packages/codesleeve/stapler
重命名为app/config/packages/codesleeve/laravel-stapler
。 -
图像处理库现在通过 Imagine Image 包的完整类名进行引用(例如
gd
现在由Imagine\Gd\Imagine
引用)。 -
在您的s3配置中,现在您不需要传递'key'、'secret'、'region'和'scheme'选项,而是需要传递一个包含这些选项(以及您可能需要的任何其他选项)的单一's3_client_config'数组。这些选项将被直接传递给s3ClientFactory以创建S3客户端。以数组形式传递参数现在允许您根据需要(针对特定模型/附件)配置s3客户端。请参阅:http://docs.aws.amazon.com/aws-sdk-php/guide/latest/configuration.html#client-configuration-options
-
在您的s3配置中,现在您不需要传递'Bucket'和'ACL',而是需要传递一个包含这些值的单一's3_object_config'数组(这用于S3Client::putObject()方法)。请参阅:http://docs.aws.amazon.com/aws-sdk-php/latest/class-Aws.S3.S3Client.html#_putObject
-
':laravel_root'插值已更改为':app_root'
快速入门
在您的应用程序的根目录(可能是public文件夹)中,创建一个名为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:固定 <tablename> <attachment>
在上面的快速入门示例中,调用php artisan stapler:固定 users avatar
后,再调用php artisan migrate
,向users表添加了以下字段
- (字符串) avatar_file_name
- (整数) avatar_file_size
- (字符串) avatar_content_type
- (时间戳) avatar_updated_at
刷新
使用刷新
命令可以重新处理模型附件上上传的图像。它通过在模型的每个附件(或仅针对特定附件)上调用reprocess()方法来实现。这在为已上传的附件添加新样式时非常有用。
重新处理ProfilePicture模型的全部附件:php artisan stapler:刷新 ProfilePicture
仅重新处理ProfilePicture模型上的照片附件:php artisan stapler:刷新 TestPhoto --attachments="photo"
重新处理ProfilePicture模型上的附件列表:php artisan stapler:刷新 TestPhoto --attachments="foo, bar, baz, etc"
故障排除
在提交问题或创建pull request之前,请先查看Stapler包的故障排除部分。您遇到的大部分(如果不是全部)问题可能与基础Stapler包有关,并且已经在那里得到了解决。
贡献
此包始终欢迎贡献
- 主分支将始终包含最新的工作(错误修复、新功能等),但是它可能并不总是稳定的;自行承担风险。每个新的标记版本都将来自master分支的工作,一旦事情稳定下来,等等。