Как эффективно отладить TYPO3-Fluid-Form для нового объекта?
У меня есть "нормальный" контроллер для объекта под названием приложение. Этот объект стал довольно сложным и использует ajax-валидации и множество jQuery-функций для проверки значений свойств и так далее. К сожалению, я иногда получаю ошибки от processAction, сообщая, что необходимый параметр $newApplication не задан.
Core: Exception handler (WEB): Uncaught TYPO3 Exception: #1298012500:
Required argument "newApplication" is not set for
VENDOR\myExt\Controller\ApplicationController->process
Новый объект приложения передается из newAction в шаблон жидкости так же, как это показано в примере Blog/Post базы TYPO3-docbase.
К сожалению, я застрял, находя причину, по которой действие процесса не получает объект приложения из формы правильно, так как это происходит время от времени (получение ошибки в журналах в производительной системе), но я не могу воспроизвести его самостоятельно testclient, где все работает, как и ожидалось, с различными браузерами. Кроме того, форма общедоступна, так что я думаю, что это не проблема, связанная с правами и т. Д.
Любой намек на то, как эффективно отладить эту ситуацию, был бы чрезвычайно полезен. Заранее спасибо Оливер
Дополнительная информация и код:
<v:variable.set name="nationalityoptions" value="{v:variable.convert(value: {}, type: 'array')}" />
<div id="bewerbungsformcontent" class="customerform">
<f:form id="newApplicationForm" name="newApplication" extensionName="myExt" object="{newApplication}" objectName="newApplication" controller="Application" action="process" enctype="multipart/form-data" method="post">
<div name="personaldatadiv" id="personal_data_div" class="applicationform_block_div">
<h3><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:personaldata-fieldset-title"/></h3>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-title" /></label>
<f:form.select id="applicationform_genderselect" name="title" class="form_select" property="title" options="{vendor:TcaOptions(property: 'title', subject: 'Car24\\Car24\\Domain\\Model\\Application')}" value="0" /><span class="required">*</span></p>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-salutation" /></label>
<f:form.select id="applicationform_salutationselect" name="salutation" class="form_select" property="salutation" options="{vendor:TcaOptions(property: 'salutation', subject: 'Car24\\Car24\\Domain\\Model\\Application')}" value="0" /></p>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-forename" /></label>
<f:form.textfield id="applicationform_forenameinput" name="forename" class="form_textinput" placeholder="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-forename')}" property="forename" value="" required="true" /><span class="required">*</span></p>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-name" /></label>
<f:form.textfield id="applicationform_nameinput" name="name" class="form_textinput" placeholder="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-name')}" property="name" value="" required="true" /><span class="required">*</span></p>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-postalcode" /></label>
<f:form.select options="{}" id="applicationform_postalnumberinput" name="addressPostalCity" class="form_select select2_plz" value="" /><span class="required">*</span></p>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-street" /></label>
<f:form.textfield id="applicationform_streetinput" name="addressStreet" class="form_select" placeholder="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-street')}" property="addressStreet" value="" required="true" /><span class="required">*</span></p>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-housenumber" /></label>
<f:form.textfield id="applicationform_housenumberinput" name="addressNumber" class="form_textinput" placeholder="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-housenumber')}" property="addressNumber" value="" required="true" /><span class="required">*</span></p>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-country" /></label>
<f:form.textfield id="applicationform_countryinput" name="addressCountry" class="form_textinput_readonly" property="addressCountry" required="true" value="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-country-germany')}" readonly="true" tabindex="-1" /><span class="required">*</span></p>
<p><label for=""><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-birthdate" /></label>
<f:form.textfield id="applicationform_birthdateselect" name="dateselect" class="form_dateselect" placeholder="dd.mm.yyyy" required="true" value="" /><span class="required">*</span></p>
<p><label id="applicationform-label-reference" for="applicationform-referencenumber"><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-origin" /></label>
<f:form.select id="applicationform_originselect" name="nationality" class="form_select" property="nationality" options="{vendor:TcaOptions(property: 'nationality', subject: 'Car24\\Car24\\Domain\\Model\\Application')}"/><span class="required">*</span></p>
<h3><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationinfo-fieldset-contactinfo"/></h3>
<h5><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-phoneinfo"/></h5>
<p><label for="applicationform_phonecodeinput"><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-phone" /></label>
<f:form.textfield id="applicationform_phonecodeinput" name="contactPhoneCode" property="contactPhoneCode" class="form_textinput" placeholder="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-phonecode')}" value="" />
<f:form.textfield id="applicationform_phoneinput" name="contactPhone" property="contactPhone" class="form_textinput" placeholder="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-phone-number')}" value="" /><span class="required">*</span></p>
<p><label for="applicationform_mobileinput"><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-mobile" /></label>
<f:form.textfield id="applicationform_mobileinput" name="contactMobile" class="form_textinput" property="contactMobile" placeholder="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-mobile')}" value="" /><span class="required">*</span></p>
<p><label for="applicationform_mailinput"><f:translate key="LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-mail" /></label>
<f:form.textfield type="email" id="applicationform_mailinput" name="contactMail" class="form_textinput" property="contactMail" placeholder="{f:translate(key: 'LLL:EXT:vendor/Resources/Private/Language/locallang_applicationform.xlf:applicationform-mail')}" value="" required="true" /><span class="required">*</span></p>
</div>
</f:form>
</div>
1 ответ
Скорее всего, у вас есть одна из следующих проблем:
- Ваше действие контроллера требует объекта в качестве аргумента, но в вашем
f:form
Вы не установили имя объекта или оно имеет неправильное имя. - Ваша форма отправляет действие контроллера в другой плагин, но вы не указали имя целевого плагина, поэтому аргументы запроса не читаются принимающим плагином.
- Вы публикуете данные, которые не могут быть сопоставлены с нужным типом целевого объекта; например, данные могут быть неполными, или вы публикуете идентификатор объекта, который не существует.
- Вы перенаправляете куда-то, к действию, которое требует аргумента, но не включает аргумент.
Большинство из них сводятся к тому, как вы создали свой шаблон. Практическое правило: сохраняйте как можно больше компонентов формы, используя object
а также property
атрибуты вместо того, чтобы вручную создавать имена ваших полей.
отладка $this->request
При возникновении этого сбоя может появиться больше информации, например, об отсутствии значений аргумента или действиях источника в случае перенаправления
Дополнительная информация может быть предоставлена только в том случае, если вы разместите свой код шаблона (в частности, все внутри, включая f:form
тег). К вашему сведению, использование проверки ajax может также привести к рассинхронизации между фактическими требованиями проверки и выполненной вами проверкой - поэтому, казалось бы, действительный объект может быть недействительным, когда он отображается и проверяется вашим контроллером. Обратите внимание, что любое переопределение, которое вы делаете в вашем контроллере, может также влиять на поведение, например, проверки и сопоставления аргументов.
РЕДАКТИРОВАТЬ: ясно, из исходного кода, который вы разместили выше, вы используете имена свойств пользовательской формы вместо использования свойства объекта. Это действительно повлияет на отображение аргументов контроллера: ваши поля будут передаваться как отдельные поля записей, а не как свойства объекта.