ambengers / eloquent-word
Laravel 包,用于创建依赖于 Eloquent ORM 的 Word 文档。
Requires
- php: ^8.0
- illuminate/support: ^9|^10
- phpoffice/phpword: ^0.18.0
- spatie/laravel-medialibrary: ^10.0
Requires (Dev)
- orchestra/testbench: ^7.0|^8.0
- phpunit/phpunit: ^9.5
README
此包提供了一种优雅的方法来生成使用 Eloquent 模型的 Word 文档。使用 PHPOffice/PHPWord 包生成 Word 文档,并使用 Laravel Medialibrary 将 Word 文档关联为 Eloquent 模型媒体。
Spatie Media Library 版本兼容性
安装
通过 Composer
$ composer require ambengers/eloquent-word
可选,您可以运行以下命令来发布配置文件。
php artisan vendor:publish --tag=eloquent-word-config
用法
Eloquent Word 类
您可以使用以下命令生成您的 Eloquent Word 类
$ php artisan make:eloquent-word PostWord
可选,您还可以传递一个 --view
选项来同时生成一个视图模板文件。
$ php artisan make:eloquent-word PostWord --view=posts.word
默认情况下,类将位于 App\Word
命名空间中。您可以在配置文件中自定义此设置。
您的 Eloquent Word 类将包含 2 个方法
getData()
提供要在视图中使用的数据getView()
视图文件名作为 Word 模板
namespace App\Word; use Ambengers\EloquentWord\AbstractEloquentWord; class PostWord extends AbstractEloquentWord { public function getData() : array { return [ 'title' => $this->model->title, 'body' => $this->model->body, ]; } public function getView() : string { return 'posts.word'; } }
视图模板
与使用 html 的 PDF 模板不同,Word 模板是使用 php 脚本创建的。因此,在您的视图模板文件中,您可以使用像这样...
@php // You automatically have access to $word within your view template, // which is an instance of \PhpOffice\PhpWord\PhpWord::class... $section = $word->addSection(); $section->addTitle($title); $section->addTextBreak(); $section->addText($body); @endphp
在您的视图模板中,您自动可以访问 $word
变量,这将为您提供 PhpOffice\PhpWord\PhpWord
类的一个实例。这将使您能够开始格式化 Word 文档。
您可以通过访问 PHPWord 官方文档 来了解更多的信息。
现在您可以从控制器(或您的应用程序中的任何地方)使用 Eloquent Word 类。
下载 Word
return app(PostWord::class) ->model($post) ->handle();
Eloquent Word 与 Media Library
此包还提供了一种优雅的方法,通过 Media Library 包将 Word 文档关联到 Eloquent 模型。为此,您需要在您的 Eloquent Word 类中使用一个特质。
use Ambengers\EloquentWord\InteractsWithMediaLibrary; class PostWord extends AbstractEloquentWord { use InteractsWithMediaLibrary; }
然后在您的控制器中,就像使用 medialibrary 一样,只需提供 Word 文档将要关联的集合名称。
return app(PostWord::class) ->model($post) ->toMediaCollection('reports') ->handle();
为了方便起见,您还可以链接其他 medialibrary 方法。
return app(PostWord::class) ->model($post) ->toMediaCollection('reports') ->withCustomProperties(['foo' => 'bar']) ->withAttributes(['creator_id' => auth()->id()]) ->handle();
在幕后,Eloquent Word 将将方法调用转发到 medialibrary 的 FileAdder::class
,这样您就可以进一步利用其功能。
自定义
如果您需要自定义默认文件名或扩展名,您可以在调用您的 Eloquent Word 类时链接一些设置方法。
return app(PostWord::class) ->model($post) ->filename('some-cool-filename') ->extension('odt') ->toMediaCollection('reports') ->handle();
安全性
如果您发现任何与安全相关的问题,请向作者发送电子邮件而不是使用问题跟踪器。
许可
有关更多信息,请参阅许可文件。