fluidtypo3/fluidbackend

此包已被弃用且不再维护。未建议替代包。
最新版本(1.1.0)的包没有提供许可证信息。

FluidTYPO3的fluidbackend包

安装次数: 1,366

依赖项: 1

建议者: 0

安全: 0

星标: 12

关注者: 7

分支: 5

开放性问题: 3

类型:typo3-cms-extension

1.1.0 2015-11-25 10:37 UTC

This package is not auto-updated.

Last update: 2020-01-24 15:46:21 UTC


README

68747470733a2f2f666c7569647479706f332e6f72672f6c6f676f2e7376677a

Fluidbackend: Flux后端模块

包状态

Build Status Coverage Status

框架状态

Build Status Coverage Status

Fluidbackend使用Flux表单作为后端模块,可以将数据保存到多种目标和目标类型。

这三段代码共同通过Fluidbackend创建了一个新的后端模块

// ext_tables.php
\FluidTYPO3\Flux\Core::registerProviderExtensionKey('MyVendor.Myextension', 'Backend');
// Classes/Controller/BackendController
namespace MyVendor\Myextension\Controller;
use FluidTYPO3\Fluidbackend\Controller\AbstractBackendController;
class BackendController extends AbstractBackendController {

}
<!-- Resources/Private/Templates/Backend/Example.html -->
{namespace flux=FluidTYPO3\Flux\ViewHelpers}
<f:layout name="Backend" />
<f:section name="Configuration">
    <flux:form id="mymodule">
        <!-- The options that govern integration -->
        <flux:form.option name="Fluidbackend" value="{
            moduleGroup: 'mygroupnameorexistinggroup',
            modulePosition: 'after:web',
            modulePageTree: 1}" />
        
        <!-- The fields that the form will contain -->
        <flux:field.input name="inputfield" />
        
        <!-- The pipe(s) which will process the data -->
        <flux:pipe.flashMessage title="Win!" message="You win!" />
    </flux:form>
</f:section>
<f:section name="Main">
	<!-- If you want some content before the form... -->
    <flux:form.render form="{form}" />
    <!-- ...or after it, here's the place to put it -->
</f:section>

概念

Fluidbackend接受类似于Fluidcontent和Fluidpages等其他Flux功能使用的Flux增强的Fluid模板,并将该模板内部的Flux表单定义转换为完整的后端模块。像Fluidcontent和Fluidpages一样,Fluidbackend也要求你在所谓的Provider扩展中发送你的模板。Fluidbackend需要一个控制器类 - 你的模块仍然需要注册到TYPO3作为合适的后端模块,但Fluidbackend使用Flux来读取如何将模板注册为后端模块的指令。

Fluidbackend要求一个控制器类 - 你的模块仍然需要在TYPO3中注册为适当的后端模块,但Fluidbackend使用Flux来读取注册模板为后端模块的指令。你可以在模板中定义这些选项,就像Fluidcontent和Fluidpages一样,集成者可以在以后替换这些模板,添加额外的字段,数据处理等。

Fluidbackend被有意创建为适用于80%的使用案例,以保持复杂性低。因此,它不是高级后端模块的替代品 - 它仅是快速基于表单创建模块的一种方式,该表单可以保存/处理数据。

它是如何工作的

Fluidbackend的开发流程如下

  1. 开发者注册与Flux关联的Provider扩展,控制器名称为Backend
  2. 开发者创建模板中的表单,包含模块选项和Pipes以处理数据。
  3. Fluidbackend挂钩到TYPO3后端渲染,处理Backend Provider扩展。
  4. 检索每个模板的Flux表单实例。
  5. 使用此表单中定义的选项来提供模块图标、位置、组等。
  6. 将模块添加到可用的TYPO3后端模块列表中。
  7. 对于每个包含有效和启用表单定义的模板文件,重复步骤3-5。

用户流程如下

  1. 用户进入后端模块。
  2. 渲染与该模块对应的模板。
  3. 用户填写模板中定义的表单。
  4. 用户提交表单数据。
  5. 调用BackendControllersaveAction操作。
  6. Fluidbackend读取表单实例。
  7. 执行Flux表单中作为Pipes定义的所有输入和输出处理。
  8. 用户返回到表单。

除了通过所有Pipes传递数据外,Fluidbackend还会存储一个数据库记录(目前存储在PID零)。可以在该记录中检索存储的数据。此数据记录使用Extbase域模型原则,并可以附加到其他扩展的其他域记录,如果您希望将存储的数据集绑定到模型实例之一或多个。

有两种方式可以手动访问存储的数据记录

<!-- in Fluid -->

{flux:form.data(table: 'tx_fluidbackend_domain_model_configuration',
	field: 'configuration', uid: uidOfSavedRecord) -> v:var.set(name: 'myData')}
// In PHP

// $this->configurationRepository is an injected \FluidTYPO3\Fluidbackend\Domain\Repository\ConfigurationRepository
$uid = 123; // Uid of stored data record.
/** @var $settingsRecord \FluidTYPO3\Fluidbackend\Domain\Model\Configuration */
$settingsRecord = $this->configurationRepository->findByUid($uid);
$configuration = (array) $settingsRecord->getConfiguration();

什么是“管道”?

管道 是来自 Flux 的一个概念,它本质上定义了一些接受输入并产生输出的处理。一个 管道 可能会修改它接收到的数据,或者触发某些动作而不修改数据。在内部,一个 管道 是一个简单的类,它有一个方法接受数据作为输入,并期望返回数据,可以是修改后的也可以不是。Flux 提供了 ViewHelpers,允许开发人员将 管道 与 Flux 表单关联起来。每个 管道 可以通过使用 direction 参数配置为在控制器动作调用之前或之后执行。

管道 执行时,输入数据按照它们定义的顺序通过每个 管道。如果一个 管道 转换数据,那么转换后的数据将从该点开始传递,并且所有后续的 管道 只接收转换后的数据。

因为 管道 定义在模板中,所以可以使用 f:if 条件来控制它们,并且可以单独控制每个 管道 的每个参数。可以添加新的 管道 并删除/禁用现有的 管道

Fluidbackend 在表单数据提交时使用这些。检索表单实例,并从其中检索并处理所有 管道 实例。在任何时候都可以更改 管道 - 例如,在数据发送到控制器后可以在控制器中完成。可以使用 $form->getOutlet()->getPipesIn()$form->getOutlet()->getPipesOut() 来访问 管道,其中 管道 按其 direction 参数分组。

Flux 包含了一些 管道

  • TypeConverterPipe - 将输入转换为另一个输出类型。
  • FlashMessagePipe - 分发具有选定标题/消息/严重性的 FlashMessage。
  • EmailPipe - 使用选定的主题/发件人/收件人发送电子邮件。
  • ControllerPipe - 使用提交的数据作为输入调用自定义控制器动作。

作为开发人员,您可以创建和实现自己的 管道 实现。为此

  1. 实现 Flux 的 PipeInterface
  2. 创建一个继承自 Flux 的 AbstractFormViewHelper 的 ViewHelper 类。
  3. 使该 ViewHelper 执行 $this->getForm()->getOutlet()->addPipeIn($pipe)(或 addPipeOut($pipe))。
  4. 或者,在您的 BackendController 中,执行 $this->provider->getForm($this->getRecord())->getOutlet()->addPipeIn($pipe)

如果要让您的 管道 通过模板进行控制,为其添加一个 ViewHelper。否则,您只需要这个类。