# 导入导出操作
### 介绍
**导入导出行为**是一个控制器修改器,提供了用于导入和导出数据的功能。该行为提供了两个页面,分别称为“导入”和“导出”。导入页面允许用户上载CSV文件并将列与数据库匹配。导出页面则相反,它允许用户从数据库下载列作为CSV文件。该行为提供了控制器动作`import()`和`export()`。
行为配置分为两部分,每部分都取决于一个特殊的模型类以及一个列表和表单字段定义文件。要使用导入和导出行为,应将其添加到`$implement`控制器类的属性中。另外,`$importExportConfig`应该定义class属性,并且其值应引用用于配置行为选项的YAML文件。
~~~
namespace Acme\Shop\Controllers;
class Products extends Controller
{
public $implement = [
'Backend.Behaviors.ImportExportController',
];
public $importExportConfig = 'config_import_export.yaml';
// [...]
}
~~~
### [](https://octobercms.com/docs/backend/import-export#configuring-import-export)配置行为
`$importExportConfig`属性中引用的配置文件以YAML格式定义。该文件应放置在控制器的[views目录中](https://octobercms.com/docs/backend/controllers-ajax/#introduction)。以下是配置文件的示例:
~~~
# ===================================
# Import/Export Behavior Config
# ===================================
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
~~~
下面列出的配置选项是可选的。如果您希望行为支持[Import](https://octobercms.com/docs/backend/import-export#import-page)或[Export](https://octobercms.com/docs/backend/import-export#export-page)或同时支持两者,请定义它们。
| 选项 | 描述 |
| --- | --- |
| **defaultRedirect** | 未定义特定重定向页面时,用作后备重定向页面。 |
| **import** | 导入页面的配置数组或对配置文件的引用。 |
| **export** | 导出页面的配置数组或对配置文件的引用。 |
| **defaultFormatOptions** | 默认CSV格式选项的配置数组或对配置文件的引用。 |
### [](https://octobercms.com/docs/backend/import-export#import-page)导入页面
要支持“导入”页面,请在YAML文件中添加以下配置:
~~~
import:
title: Import subscribers
modelClass: Acme\Campaign\Models\SubscriberImport
list: $/acme/campaign/models/subscriberimport/columns.yaml
redirect: acme/campaign/subscribers
~~~
导入页面支持以下配置选项:
| 选项 | 描述 |
| --- | --- |
| **title** | 页面标题,可以引用[本地化字符串](https://octobercms.com/docs/plugin/localization)。 |
| **list** | 定义可用于导入的列表列。 |
| **form** | 提供用作导入选项的其他字段(可选)。 |
| **redirect** | 导入完成后的重定向页面,可选 |
| **permissions** | 执行操作所需的用户权限,可选 |
### [](https://octobercms.com/docs/backend/import-export#export-page)导出页面
要支持“导出”页面,请在YAML文件中添加以下配置:
~~~
export:
title: Export subscribers
modelClass: Acme\Campaign\Models\SubscriberExport
list: $/acme/campaign/models/subscriberexport/columns.yaml
redirect: acme/campaign/subscribers
~~~
导出页面支持以下配置选项:
| 选项 | 描述 |
| --- | --- |
| **title** | 页面标题,可以引用[本地化字符串](https://octobercms.com/docs/plugin/localization)。 |
| **fileName** | 用于导出文件的文件名,默认为**export.csv**。 |
| **list** | 定义可用于导出的列表列。 |
| **form** | 提供用作导入选项的其他字段(可选)。 |
| **redirect** | 导出完成后的重定向页面,可选。 |
| **useList** | 设置为true或列表定义的值以启用[与Lists的集成](https://octobercms.com/docs/backend/import-export#list-behavior-integration),默认值:false。 |
### [](https://octobercms.com/docs/backend/import-export#format-options)格式选项
要覆盖默认的CSV格式选项,请在YAML文件中添加以下配置:
~~~
defaultFormatOptions:
delimiter: ';'
enclosure: '"'
escape: '\'
encoding: 'utf-8'
~~~
格式选项支持以下配置选项(所有可选):
| 选项 | 描述 |
| --- | --- |
| **delimiter** | 分隔符。 |
| **enclosure** | 外壳字符。 |
| **escape** | 转义符。 |
| **encoding** | 文件编码(仅用于导入)。 |
### [](https://octobercms.com/docs/backend/import-export#import-export-views)导入和导出视图
对于“[导入](https://octobercms.com/docs/backend/import-export#import-page)和[导出”的](https://octobercms.com/docs/backend/import-export#export-page)每个页面功能,您应该提供一个具有相应名称的[视图文件](https://octobercms.com/docs/backend/controllers-ajax/#introduction)**\-import.htm**和**export.htm**。
导入/导出行为将两个方法添加到控制器类:`importRender`和`exportRender`。这些方法根据上述YAML配置文件呈现导入和导出节。
### [](https://octobercms.com/docs/backend/import-export#import-view)导入视图
该**import.htm**视图表示导入页面,允许用户导入数据。典型的“导入”页面包含面包屑,“导入”部分本身和提交按钮。该**数据请求**属性应该指的是`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() ?>
~~~
### [](https://octobercms.com/docs/backend/import-export#export-view)汇出检视
该**export.htm**视图表示导出页面,允许用户将文件从数据库导出。典型的“导出”页面包含面包屑,“导出”部分本身和提交按钮。该**数据请求**属性应该指的是`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() ?>
~~~
### [](https://octobercms.com/docs/backend/import-export#import-model)定义导入模型
为了导入数据,您应该为此过程创建一个专用模型,以扩展`Backend\Models\ImportModel`该类。这是一个示例类定义:
~~~
class SubscriberImport extends \Backend\Models\ImportModel
{
/**
* @var array The rules to be applied to the data.
*/
public $rules = [];
public function importData($results, $sessionKey = null)
{
foreach ($results as $row => $data) {
try {
$subscriber = new Subscriber;
$subscriber->fill($data);
$subscriber->save();
$this->logCreated();
}
catch (\Exception $ex) {
$this->logError($row, $ex->getMessage());
}
}
}
}
~~~
该类必须定义一个称为的`importData`用于处理导入数据的方法。第一个参数`$results`将包含一个数组,其中包含要导入的数据。第二个参数`$sessionKey`将包含用于请求的会话密钥。
| 方法 | 描述 |
| --- | --- |
| `logUpdated()` | 记录更新时调用。 |
| `logCreated()` | 创建记录时调用。 |
| `logError(rowIndex, message)` | 导入记录有问题时调用。 |
| `logWarning(rowIndex, message)` | 用于提供软警告,例如修改值。 |
| `logSkipped(rowIndex, message)` | 未导入(跳过)整行数据时使用。 |
### [](https://octobercms.com/docs/backend/import-export#export-model)定义导出模型
为了导出数据,您应该创建一个扩展`Backend\Models\ExportModel`该类的专用模型。这是一个例子:
~~~
class SubscriberExport extends \Backend\Models\ExportModel
{
public function exportData($columns, $sessionKey = null)
{
$subscribers = Subscriber::all();
$subscribers->each(function($subscriber) use ($columns) {
$subscriber->addVisible($columns);
});
return $subscribers->toArray();
}
}
~~~
该类必须定义一个称为`exportData`用于返回导出数据的方法。第一个参数`$columns`是要导出的列名称的数组。第二个参数`$sessionKey`将包含用于请求的会话密钥。
### [](https://octobercms.com/docs/backend/import-export#custom-options)自订选项
导入和导出表单均支持可使用表单字段引入的自定义选项,这些选项分别在导入或导出配置中的**表单**选项中定义。然后将这些值传递到导入/导出模型,并在处理期间可用。
~~~
import:
[...]
form: $/acme/campaign/models/subscriberimport/fields.yaml
export:
[...]
form: $/acme/campaign/models/subscriberexport/fields.yaml
~~~
指定的表单字段将出现在导入/导出页面上。这是一个示例`fields.yaml`文件内容:
~~~
# ===================================
# Form Field Definitions
# ===================================
fields:
auto_create_lists:
label: Automatically create lists
type: checkbox
default: true
~~~
可以使用导入模型的方法内部访问上方名为**auto\_create\_lists**的表单字段的值。如果这是导出模型,则该值将在方法内部可用。`$this->auto_create_lists``importData``exportData`
~~~
class SubscriberImport extends \Backend\Models\ImportModel
{
public function importData($results, $sessionKey = null)
{
if ($this->auto_create_lists) {
// Do something
}
[...]
}
}
~~~
### [](https://octobercms.com/docs/backend/import-export#list-behavior-integration)与列表行为整合
有另一种导出数据的方法,该方法使用[列表行为](https://octobercms.com/docs/backend/lists)提供导出数据。为了使用此功能,您应该对控制器类`Backend.Behaviors.ListController`的`$implement`字段进行定义。您不需要使用导出视图,所有设置将从列表中拉出。这是唯一需要的配置:
~~~
export:
useList: true
~~~
如果使用[多个列表定义](https://octobercms.com/docs/backend/lists#multiple-list-definitions),则可以提供列表定义:
~~~
export:
useList: orders
fileName: orders.csv
~~~
该`useList`选项还支持扩展配置选项。
~~~
export:
useList:
definition: orders
raw: true
~~~
支持以下配置选项:
| 选项 | 描述 |
| --- | --- |
|**definition** | 用于从中获取记录的列表定义(可选)。 |
| **raw** | 从记录中输出原始属性值,默认值:false。 |
- 基本说明
- 基本操作
- October cms 安装
- 后台控制器路径
- 图标
- 获取安装网上的插件/主题
- 插件构造器使用
- 定时任务
- October后台控制器
- vscode编辑器
- ajax操作
- 使用
- ajax更新组件
- ajax属性API
- JavaScript API
- ajax综合使用
- 主题
- 多语言主题
- 安装市场主题
- 主题程序处理
- 主题
- 页面
- 部件
- 布局
- 内容
- 组件
- 媒体
- 主题表单操作
- 表单使用
- 表单后端程序处理
- 插件
- 自定义插件
- 插件说明
- 插件导航条
- 插件数据库设置
- 插件的设置管理
- 插件的配置文件config
- 组件
- app服务
- app容器
- 扩展行为
- 缓存
- Collection类
- Lazy Collections
- Collection方法
- 助手函数
- 数组助手函数
- 路径助手函数
- 玄乐助手函数
- 其他助手函数
- 错误与记录
- 事件处理
- HTML页面
- 文件与目录操作
- 散列和加密
- 邮件
- 邮件内容
- 邮件发送
- 分页
- 模板解析器
- 动态解析器语法
- 队列消息
- 请求与输入
- 响应
- 视图
- 路由器
- 配置
- 验证操作
- 处理错误消息
- 错误消息与视图
- 可用的验证规则
- 有条件的验证规则
- 验证数组
- 错误消息
- 自定义验证规则
- 模型操作
- 定义模型与其属性
- 检索模型
- 插入与更新
- 删除模型
- 查询范围
- 事件操作
- 关联操作
- 定义关系
- 关系类型
- 多肽关系
- 关系查询
- 渴望加载
- 插入模型
- 数据库操作
- 基本用法
- 数据表结构
- 查询连贯操作
- 结果检索
- select子句
- 插入更新
- where子句
- 排序,分组,限制和偏移
- 文件附件
- Collection操作
- 属性操作
- 系列化json
- 数据库属性
- 数据库行为
- 控制器
- 后台控制器定义
- 后台页面
- 后台组件
- 后台表单
- 表单组件
- 表单视图
- 表单行为
- 后台列表
- 列表行为
- 列表过滤器
- 可用列类型
- 关系行为
- 关系行为类型
- 扩展关系行为
- 列表排序操作
- 导入导出操作
- 用于与权限
- corlate模板修改
- 修改顶部导航
- laravel问题
- 控制器不存在
- 控制器
- 路由组
- laravel笔记
- laravel 安装
- 伪静态配置
- 依赖注入 & 控制器
- 中间件
- 路由文件
- 视图