Backend\Behaviors\ImportExportController 类是一个控制器行为,它提供数据导入和导出功能。该行为提供两个名为导入和导出的页面。导入页面允许用户上传 CSV 文件,并将列映射到数据库。导出页面则作用相反,它允许用户将数据库中的列下载为 CSV 文件。该行为提供控制器动作 import() 和 export()。
导入导出行为配置分为两个部分定义,每个部分都依赖于一个特殊的模型类以及一个列表和表单字段定义文件。 要使用此行为,您应该将其添加到控制器类的 $implement 属性。 此外,$importExportConfig 类属性应该被定义,并且其值应该指向用于配置行为属性的 YAML 文件。
namespace Acme\Shop\Controllers;
class Products extends Controller
{
public $implement = [
\Backend\Behaviors\ImportExportController::class
];
public $importExportConfig = 'config_import_export.yaml';
// [...]
}在 $importExportConfig 属性中引用的配置文件采用 YAML 格式定义. 该文件应该放置到控制器的 视图目录 中. 下面是一个配置文件的示例.
# config_import_export.yaml
import:
title: Import Subscribers
modelClass: Acme\Campaign\Models\SubscriberImport
list: $/acme/campaign/models/subscriber/columns.yaml
export:
title: Export Subscribers
modelClass: Acme\Campaign\Models\SubscriberExport
list: $/acme/campaign/models/subscriber/columns.yaml以下列出的配置属性是可选的。如果您希望此行为支持导入页面、导出页面或两者,请定义它们。
| Property | Description |
|---|---|
| defaultRedirect | used as a fallback redirection page when no specific redirect page is defined. |
| import | a configuration array or reference to a config file for the Import page. |
| export | a configuration array or reference to a config file for the Export page. |
| defaultFormatOptions | a configuration array or reference to a config file for the default CSV format options. |
为了支持导入页面,在 YAML 文件中添加以下配置。
import:
title: Import Subscribers
modelClass: Acme\Campaign\Models\SubscriberImport
list: $/acme/campaign/models/subscriberimport/columns.yaml
redirect: acme/campaign/subscribers“导入”页面支持以下配置属性。
| Property | Description |
|---|---|
| title | a page title, can refer to a localization string. |
| list | defines the list columns available for importing. |
| form | provides additional fields used as import options, optional. |
| redirect | redirection page when the import is complete, optional |
| permissions | user permissions needed to perform the operation, optional |
为支持导出页面 添加以下配置到 YAML 文件。
export:
title: Export Subscribers
modelClass: Acme\Campaign\Models\SubscriberExport
list: $/acme/campaign/models/subscriberexport/columns.yaml
redirect: acme/campaign/subscribers以下配置属性支持在导出页面中使用:
| Property | Description |
|---|---|
| title | a page title, can refer to a localization string. |
| fileName | the file name to use for the exported file without extension. Default export |
| list | defines the list columns available for exporting. |
| form | provides additional fields used as export options, optional. |
| redirect | redirection page when the export is complete, optional. |
| useList | set to true or the value of a list definition to enable integration with lists. Default: false. |
要覆盖默认格式选项,请在 YAML 文件中添加以下配置:
defaultFormatOptions:
fileFormat: json以下配置属性(均为可选)适用于格式选项,包括其适用的格式类型。
| Property | Description | Format |
|---|---|---|
| fileFormat | File format as either json, csv or csv_custom, default: json. | |
| customJson | Use a custom format for the json format type. | JSON |
| firstRowTitles | First row contains headers, import only. | CSV |
| delimiter | Delimiter character. | CSV (Custom) |
| enclosure | Enclosure character. | CSV (Custom) |
| escape | Escape character. | CSV (Custom) |
| encoding | File encoding, import only. | CSV (Custom) |
对于每个页面功能的导入和导出 您应该提供一个视图文件 具有相应的名称 - import.htm 和 export.htm。
导入/导出行为为控制器类添加了两个方法:importRender 和 exportRender。这些方法根据上述描述的YAML配置文件渲染导入和导出部分。
该 import.htm 视图代表允许用户导入数据的导入页面。一个典型的导入页面包含面包屑, 导入部分本身, 以及提交按钮。该 data-request 属性应指向由行为提供的 onImport AJAX 处理程序。下面是典型的 import.htm 视图文件的一个内容。
<?= Form::open(['class' => 'layout']) ?>
<div class="layout-row">
<?= $this->importRender() ?>
</div>
<div class="form-buttons">
<button
type="submit"
data-control="popup"
data-handler="onImportLoadForm"
data-keyboard="false"
class="btn btn-primary">
Import records
</button>
</div>
<?= Form::close() ?>export.htm视图表示导出页面,允许用户从数据库导出文件。一个典型的导出页面包含面包屑导航、导出部分本身和提交按钮。data-request属性应指向由行为提供的onExport AJAX处理程序。下面是典型的export.htm表单的内容。
<?= Form::open(['class' => 'layout']) ?>
<div class="layout-row">
<?= $this->exportRender() ?>
</div>
<div class="form-buttons">
<button
type="submit"
data-control="popup"
data-handler="onExportLoadForm"
data-keyboard="false"
class="btn btn-primary">
Export records
</button>
</div>
<?= Form::close() ?>有一种导出数据的替代方法,它使用 列表行为 来提供导出数据。为了使用此功能,您应该将 Backend\Behaviors\ListController 定义添加到控制器类的 $implement 字段中。您不需要使用导出视图,并且所有设置都将从列表中提取。以下是唯一需要的配置:
export:
useList: true然后只需添加一个导出按钮到 列表工具栏:
<a
href="<?= Backend::url('acme/campaign/subscribers/export') ?>"
class="btn btn-default oc-icon-download">
Export Records
</a>类似地,要添加导入按钮,代码将如下所示:
<a
href="<?= Backend::url('acme/campaign/subscribers/import') ?>"
class="btn btn-default oc-icon-upload">
Import Records
</a>如果您正在使用多个列表定义,那么您可以提供列表定义。
export:
useList: orders
fileName: orders.csvuseList 选项也支持扩展配置属性。
export:
useList:
definition: orders
raw: true以下配置属性受支持:
| Property | Description |
|---|---|
| definition | the list definition to source records from, optional. |
| raw | output the raw attribute values from the record, default: false. |