zunaid/laravel-stapler

为 Laravel 框架提供简单的文件上传管理。

dev-main 2024-01-19 19:23 UTC

This package is not auto-updated.

Last update: 2024-09-27 22:44:59 UTC


README

Latest Stable VersionTotal Downloads Latest Unstable Version License

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 的新版本中使用此包,请自行承担风险。

如果您将进行图像处理作为文件上传的一部分,您还需要在您的 PHP 环境中安装 GD、Gmagick 或 Imagick(您可以选择)。

安装

Laravel-Stapler 作为 composer 包分发,这是在您的应用程序中使用它的方式。

使用 Composer 安装此包。编辑您的项目 composer.json 文件以要求 codesleeve/laravel-stapler

  "require": {
    "laravel/framework": "4.*",
    "codesleeve/laravel-stapler": "1.0.*"
  }

此操作完成后,下一步是添加服务提供者。

对于 Laravel 4,打开 app/config/app.php,并将新项目添加到 providers 数组中

    'Codesleeve\LaravelStapler\Providers\L4ServiceProvider'

对于 Laravel 5,打开 config/app.php,并将新项目添加到 providers 数组中

    '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/staplerapp/config/packages/codesleeve/laravel-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](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](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:fasten <tablename> <attachment>

在上面的快速入门示例中,调用php artisan stapler:fasten users avatar后,再调用php artisan migrate,向users表添加了以下字段

  • (字符串) 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, 等"

故障排除

在提交问题或创建拉取请求之前,请先查看Stapler包的故障排除部分。很可能您在此包中遇到的所有问题都与基础stapler包有关,并且已在其中解决。

贡献

此包始终欢迎贡献

  • 主分支将始终包含最新的工作(错误修复、新功能等),但它可能并不总是稳定;请自行承担风险。每个新标签发布都将来自主分支上的工作,一旦稳定,等等。