TYPO3 tx_form条件跳过步骤

时间:2018-03-12 20:41:25

标签: forms typo3 typo3-8.x

我使用TYPO3 8 LTS,我想扩展表格。

现在我正在尝试在我的表单中添加一个条件,跳过所有其他步骤并运行我的终结器。在文档中写道,您必须使用afterInitializeCurrentPage函数:

/**
 * @param FormRuntime $formRuntime
 * @param CompositeRenderableInterface $currentPage
 * @param null|CompositeRenderableInterface $lastPage
 * @param mixed $requestArguments submitted value of the element *before post processing*
 * @return CompositeRenderableInterface
 */
public function afterInitializeCurrentPage(
    FormRuntime $formRuntime,
    CompositeRenderableInterface $currentPage,
    CompositeRenderableInterface $lastPage = null,
    array $requestArguments = []
): CompositeRenderableInterface {

    if ($requestArguments['personalized'] === '0') {
        // code here ...
    }

    return $currentPage;
}

我的问题是我不知道我是如何执行这个功能的终结者的。

我希望有人可以给我一些提示或其他东西..

[编辑]

下一个问题是,如果我使用afterInitializeCurrentPage方法,我的网站中的其他表单会出现异常:

Argument 2 passed to VENDOR\YourNamespace\YourClass::afterInitializeCurrentPage() must implement interface TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface, null given, called in [..]/typo3/sysext/form/Classes/Domain/Runtime/FormRuntime.php on line 254 

非常感谢!

1 个答案:

答案 0 :(得分:0)

您可以像下面一样调用终结者课程。

您需要在ext_localconf.php文件中添加以下行。像这样

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['ext/form']['afterInitializeCurrentPage'][]
    = \VENDOR\YourNamespace\Hooks\YourClass::class;

在路径Classes / Hooks / YourClass.php。

之后添加如下功能
<?php
namespace \VENDOR\YourNamespace\Hooks;

class YourClass
{
    /**
     * @param \TYPO3\CMS\Form\Domain\Runtime\FormRuntime $formRuntime
     * @param \TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface $currentPage
     * @param null|\TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface $lastPage
     * @param mixed $elementValue submitted value of the element *before post processing*
     * @return \TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface
     */
    public function afterInitializeCurrentPage(\TYPO3\CMS\Form\Domain\Runtime\FormRuntime $formRuntime, \TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface $currentPage, \TYPO3\CMS\Form\Domain\Model\Renderable\CompositeRenderableInterface $lastPage = null, array $requestArguments = []): CompositeRenderableInterface
    {
        return $currentPage;
    }
}