attachy / attachy
上传处理自动化
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-24 05:51:06 UTC
README
长段落插件放置处。
特性
- PHP 5.3 兼容
- 类似 Carrierwave 的版本支持。
- 简洁 - 仅需要在数据库表中对每个文件添加一个字段。
- 依赖注入
- 不是明确依赖于 Elequent,也不扩展 Eloquent 模型。
- 支持批量赋值
- 模块化 - 扩展以使用 S3 存储,处理 AJAX 上传。
- 更灵活 - 允许您决定如何创建缩略图和设计数据库表。
- 更安全 - 过滤危险的文件名和扩展名,如 '.php'。
与 Eloquent 一起使用
在您的表中插入一个新字符串列,用于存储 Attachy 的文件元数据。
<?php Schema::create('posts', function($table) { $table->increments('id'); $table->string('title'); $table->string('cool_pic');
转到您的应用程序目录,并创建一个名为 'attachy' 的新子目录。
cd /project/application mkdir attachy cd attachy/
在您刚刚创建的应用程序/attachy 目录内,创建一个名为 'coolpic.php' 的新 PHP 源文件。
<?php class CoolPic extends Filer {}
现在来创建我们的帖子模型类。
<?php class Post extends Eloquent { public function get_cool_pic() { // Tell Attachy to save the file identifer to the //cool_pic column defined in the previously created migration. return CoolPic::attach("cool_pic", $this); } // Overload the Elquent save method. public function save() { $this->cool_pick->save(); parent::save(); } }
在 'attach' 方法中,第一个参数表示之前创建的迁移中属性的名称,Attachy 将存储用于稍后检索文件路径所需的信息。
我们的帖子表单很简单
{{ Form::open_for_files('post') }} {{ Form::file('cool_pic') }} {{ Form::submit('Post') }} {{ Form::close() }}
根据约定,Attachy 将寻找您的 Filer 类类名的下划线版本,由批量赋值提供。在这个例子中,在帖子字段中是 'CoolPic'
然后,在我们的 route.php 中,我们可以使用批量赋值将帖子字段直接映射到我们的模型
<?php Route::post('new_post', function() { // populating and saving your model is not changed when using // Attachy. $post = new Post(Input::all()); $post->save(); }
就这样,您无需担心检查 multipart 请求伪造或有害的文件扩展名(如 .php 或 .sh),这些都已经为您处理好了。
生成图像标签
{{ HTML::image($post->cool_pic) }}
在这个示例表单中,表单输入字段的名称是
为了生成我们图像的缩略图版本,我们可以创建一个新版本已调整大小的文件。回到我们在 application/attachy/coolpic.php 中之前定义的 CoolPic 类,并更改以下代码。
class CoolPic extends Filer { static function has_versions() { static::register("thumbnail", function($version) { $version->transform(function($storage) { $path = $storage->retrieve(); // do not change the file name or location set by Attachy $handle = fopen($path, 'r+'); $thumb = new Imagick(); $thumb->readImageFile($handle); $thumb->thumbnailImage("250", "250"); $thumb->writeImage($handle); }); }); } }
'register' 方法的第一个参数是检索其文件路径时将引用的名称。第二个参数是一个 lambda,它将用于配置版本。有很多配置选项,但我们现在只覆盖 transform 方法。使用 transform 方法对新建的版本进行操作,我们可以注册另一个 lambda,该 lambda 将用于操作图像文件。
生成指向文件缩略图版本的链接
{{ HTML::image($post->cool_pic('thumbnail')) }}
使用这种设计,Attachy 允许您对文件执行任何操作,而无需强制您使用限制性 API。这使您有权自行决定是否使用 Image Magick、Gmagick、GD。您甚至可以进行与图像无关的处理,例如创建包含文件内容的 zip 文件以发布,可能性仅限于可以写入文件的所有内容。