由 JavaScript 添加到 Fluid-Form 的表单元素不会作为参数传递。
- 如何正确地做到这一点?
- 如何使用 JavaScript 动态添加表单字段?
预期行为:
- 表单已提交至“subscribeSubmitAction”
- “subscribeSubmitAction”验证失败
- 调用“subscribeAction”回退
- “$subscription”已设置并分配(未发生) - 而“$subscription”始终为 NULL(但在 Fluid-Form 中设置了 subscription.test)
我的猜测:
- PropertyMapper 正在删除“subscription.childs”,因为它们不在“TrustedProperties”中 - 如何添加它们?
- 为什么“$subscription”总是 NULL - 我不知道!
Controller :
namespace VENDOR\EXTENSION\Controller;
class EventController extends \TYPO3\CMS\Extbase\Mvc\Controller\ActionController
{
public function initializeAction()
{
if ($this->arguments->hasArgument('subscription'))
{
//Try to add "subscription.childs" to the PropertyMapperConfiguration
$subscriptionConfiguration = $this->arguments->getArgument('subscription')->getPropertyMappingConfiguration();
$subscriptionConfiguration->allowProperties();
$subscriptionConfiguration->forProperty('*')->allowAllProperties();
$subscriptionConfiguration->forProperty('*')->allowCreationForSubProperty('*');
$subscriptionConfiguration->forProperty('*')->forProperty('*')->allowAllProperties();
$subscriptionConfiguration->forProperty('*')->forProperty('*')->allowCreationForSubProperty('*');
$subscriptionConfiguration->forProperty('childs')->allowProperties();
$subscriptionConfiguration->forProperty('childs')->allowCreationForSubProperty('*');
$subscriptionConfiguration->forProperty('childs.*')->allowProperties();
$subscriptionConfiguration->forProperty('childs.*')->allowCreationForSubProperty('*');
print_r($this->arguments->getArgument('subscription')->getValue()); // => NULL
}
}
/**
* subscribeAction
* @param array $event
* @param array $subscription
* @ignorevalidation $subscription
*/
public function subscribeAction($event,$subscription = null)
{
print_r($subscription); // => NULL
$this->view->assign('event',$event);
$this->view->assign('subscription',$subscription);
}
/**
* subscribeSubmitAction
* @param array $event
* @param array $subscription
* @param string $g_recaptcha_reponse
* @validate $g_recaptcha_reponse NotEmpty
*/
public function subscribeSubmitAction($event,$subscription = null, $g_recaptcha_reponse = null)
{
/**
* This Method will never be called because the Validation of "$g_recaptcha_reponse" must fail (it's empty)
*/
}
}
模板:
<f:debug>{subscription}</f:debug>
<f:form action="subscribeSubmit" name="subscription" object="{subscription}">
<f:form.hidden name='event[]' value='{event.uid}' />
<f:form.textfield property="test" />
<!--suppose this was added by javascript-->
<input type="text" name="tx_extension_plugin[subscription][childs][0][test]" value="{subscription.childs.0.test}">
<f:form.hidden name='g_recaptcha_reponse' value='' />
<f:form.submit name="submit" value="Submit" />
</f:form>
最佳答案
我建议通过浏览器的网络面板检查请求。你看到那里的争论了吗?它们是否遵循 tx_extension_plugin[subscription][...
的命名模式? ?
它们应该包含在 extbase 内的请求中。
也许您不应该将它们添加到现有参数 subscription
中而是创建另一个论点。您可以以相同的方式验证它,并且在 Fluid 中应该以相同的方式提供错误。
您对“TrustedProperties”的看法可能是正确的,我对此不确定。但如果是这样,您绝对应该能够在 initializeAction
内解决这个问题。方法。
关于javascript - 在 Typo3 Extbase Controller 中使用动态 "non Domain"参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31782627/