javascript - 在 Typo3 Extbase Controller 中使用动态 "non Domain"参数

标签 javascript typo3 datamapper fluid extbase

由 JavaScript 添加到 Fluid-Form 的表单元素不会作为参数传递。

  • 如何正确地做到这一点?
  • 如何使用 JavaScript 动态添加表单字段?

预期行为:

  1. 表单已提交至“subscribeSubmitAction”
  2. “subscribeSubmitAction”验证失败
  3. 调用“subscribeAction”回退
  4. “$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/

相关文章:

javascript - Selenium 从页面上的元素获取链接

php - TYPO3 登录错误

typo3 - 如何从 hreflang 中删除 TYPO3 9 SEO 扩展中的区域

javascript - 如何在javascript中定义嵌套数组?

javascript - 使用 Node.js/Angular 对 Google 电子表格 JSON 的跨源请求

javascript - Node 使用 mysql 或 lodash 将多行合并为一行

typo3 - TYPO3 7.6 中响应式图像的附加源集合

php - 使用 wanwizard datamapper 时调用 codeginiter 帮助程序文件中的模型类对象

ruby - Datamapper 与多个键有 n 个关系

couchdb - Merb、DataMapper 和 CouchDB(或 MongoDB)的 Multi-Tenancy