Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 在Extbase/3中使用Javascript向ObjectStorage添加/创建元素_Typo3_Extbase - Fatal编程技术网

Typo3 在Extbase/3中使用Javascript向ObjectStorage添加/创建元素

Typo3 在Extbase/3中使用Javascript向ObjectStorage添加/创建元素,typo3,extbase,Typo3,Extbase,使用JavaScript以流体形式动态创建新子元素的正确方法是什么 问题: 1:n使用Extbase ObjectStorages的关系(父/子): 调用父流体窗体时,应该可以添加几个子对象(当然包括属性!) 脏,部分工作,解决方案: 我添加了一些JS代码,并动态添加了所需的输入元素。 “xxx”将对每个孩子进行交互。数据将正确存储在数据库中 <input type="text" placeholder="First Name" name="tx_booking[newBooking][a

使用JavaScript以流体形式动态创建新子元素的正确方法是什么

问题: 1:n使用Extbase ObjectStorages的关系(父/子): 调用父流体窗体时,应该可以添加几个子对象(当然包括属性!)

脏,部分工作,解决方案: 我添加了一些JS代码,并动态添加了所需的输入元素。 “xxx”将对每个孩子进行交互。数据将正确存储在数据库中

<input type="text" placeholder="First Name" name="tx_booking[newBooking][accompanyingperson][xxx][firstname]">

但是,如果发生错误,所有子窗体都将消失,并且不会显示f3窗体错误。原因可能是重定向到originalRequest(没有子字段的初始表单)

我如何处理这个问题而不耍花招?
请给我一点提示。

再说一遍,我会自己回答这个问题的! 下面的几行代码是有史以来最肮脏的代码,但它是有效的。 我真的很想知道如何以正确的方式做到这一点。但是,解决方案是从动态添加的JS输入中获取参数。这是在errorAction中完成的,并将由forward()传递到初始操作,在初始操作中会出现错误

我认为,通过使用PropertyMapper和修改trustedProperties,这一定是一种更好的方法

这里有一个简短的例子:

    // Error function in Controller

protected function errorAction() {

    $referringRequest = $this->request->getReferringRequest();

    // Manual added JS Data
    if($this->request->hasArgument('newRegistration'))
    {
        $newRegistration = $this->request->getArgument('newRegistration');
        $referringRequest->setArgument('accompanyingperson', $newRegistration['accompanyingperson']);
    }

     if ($referringRequest !== NULL) {
        $originalRequest = clone $this->request;
        $this->request->setOriginalRequest($originalRequest);
        $this->request->setOriginalRequestMappingResults($this->arguments->getValidationResults());
        $this->forward($referringRequest->getControllerActionName(), $referringRequest->getControllerName(), $referringRequest->getControllerExtensionName(), $referringRequest->getArguments());

    }
}


// action new in Controller
public function newAction(\***\***\Domain\Model\Registration $newRegistration = NULL) {
    if($this->request->hasArgument('accompanyingperson'))
    {
        $this->view->assign('accPer', $this->request->getArgument('accompanyingperson'));
    }
    .
    .
    .
}


//Fluid template of Action New
<f:if condition="{accPer}">
    <f:for each="{accPer}" as="ap" key="key" iteration="i">
        <f:form.textfield class="form-control" placeholder="First Name" property="accompanyingperson.{key}.firstname"/>
        .
        .
        .
    </f:for>
</f:if>
//控制器中的错误函数
受保护函数errorAction(){
$referringRequest=$this->request->getReferringRequest();
//手动添加JS数据
if($this->request->hasArgument('newRegistration'))
{
$newRegistration=$this->request->getArgument('newRegistration');
$refereringrequest->setArgument('accompanyingperson',$newRegistration['accompanyingperson']);
}
如果($referringRequest!==NULL){
$originalRequest=克隆$this->request;
$this->request->setOriginalRequest($originalRequest);
$this->request->setOriginalRequestMappingResults($this->arguments->getValidationResults());
$this->forward($referringRequest->getControllerActionName(),$referringRequest->getControllerName(),$referringRequest->getControllerName(),$referringRequest->getArguments());
}
}
//控制器中的新操作
公共函数newAction(\***\***\Domain\Model\Registration$newRegistration=NULL){
如果($this->request->hasArgument('accompanyingperson'))
{
$this->view->assign('acpper',$this->request->getArgument('accompanyingperson');
}
.
.
.
}
//新行动的流体模板
.
.
.

以下是我的解决方案,类似于您的解决方案

模型

class Resume extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
    /**
     * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<Builder>
     * @cascade remove
     */
    protected $builders;
}

class Builder extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {
    /**
     * @var string
     */
    protected $title;
}
模板

<f:form class="form-horizontal" name="resume" action="save" object="{resume}">
    <f:if condition="{resume.builders}">
        <f:for each="{resume.builders}" as="builder" iteration="builderIteration">
            <f:form.textfield class="form-control" property="builders.{builderIteration.index}.header" />
        </f:for>
    </f:if>
</f:form>


如果你有更好的,请告诉我。谢谢

我也有同样的问题,但到目前为止还没有找到解决办法。
<f:form class="form-horizontal" name="resume" action="save" object="{resume}">
    <f:if condition="{resume.builders}">
        <f:for each="{resume.builders}" as="builder" iteration="builderIteration">
            <f:form.textfield class="form-control" property="builders.{builderIteration.index}.header" />
        </f:for>
    </f:if>
</f:form>