ambengers/eloquent-word

Laravel 包,用于创建依赖于 Eloquent ORM 的 Word 文档。

5.0 2023-10-27 23:18 UTC

This package is auto-updated.

Last update: 2024-09-05 04:30:21 UTC


README

此包提供了一种优雅的方法来生成使用 Eloquent 模型的 Word 文档。使用 PHPOffice/PHPWord 包生成 Word 文档,并使用 Laravel Medialibrary 将 Word 文档关联为 Eloquent 模型媒体。

CircleCI StyleCI

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();

安全性

如果您发现任何与安全相关的问题,请向作者发送电子邮件而不是使用问题跟踪器。

许可

有关更多信息,请参阅许可文件