У меня есть страница с формой для создания пользователей. У пользователя есть хобби, которое можно создать на той же странице, нажав на вторую кнопку, которая открывает страницу для создания хобби. После создания хобби, предыдущая пользовательская форма должна отображаться с введенным пользователем вводом, прежде чем перейти на страницу хобби.
Есть ли способ сделать что-то вроде потока / жидкости typo3 без использования AJAX?
Я попытался передать входные данные другому действию, нажав кнопку createHobby -> Действие перенаправляет на новую страницу хобби, где пользователь может создать хобби, и после создания оно должно перенаправить обратно на форму пользователя с уже заполненным поля ввода пользователем.
Я использовал…
<input type='submit' value='Create' formaction='/hobby/create' />`
чтобы добиться этого, но, кажется, есть некоторые проблемы с Uris … Я получаю следующую ошибку:
#1301610453: Could not resolve a route and its corresponding URI for the given parameters.
Я думаю, что использование атрибута formaction
не является хорошим решением для каждого случая, так как не поддерживается IE < 10 как вы можете посмотреть здесь. Я думаю, что JavaScript бэкпорт также следует учитывать (динамически изменить action
атрибут формы при нажатии на вторую кнопку, перед фактической отправкой формы).
Что касается вашей ошибки, вы должны нет — и, вероятно, никогда — не использовать прямой ввод HTML, вместо этого попробуйте сосредоточиться на Fluid ViewHelpers, которые позволяют TYPO3 создавать правильный ввод HTML.
Попробуйте это вместо этого:
<f:form.submit value="Create" additionalAttributes="{formaction: '{f:uri.action(controller: \'hobby\', action: \'create\')}'}" />
Вы можете сделать $this->forward(...)
в initializeAction
в зависимости от параметра вашего действия.
Давайте представим, что ваше действие формы по умолчанию — «создать». Так что вам нужно initializeCreateAction
:
public function initializeCreateAction()
{
if ($this->arguments->hasArgument('createHobby')) {
$createHobby = $this->request->getArgument('createHobby');
if ($createHobby) {
$this->forward('create', 'Hobby', NULL, $this->request->getArguments());
}
}
}
Теперь вы должны назвать свой вход createHobby
и назначьте свой createAction
этот параметр:
В жидкости:
<f:form.button type="submit" name="createHobby" value="1">Create Hobby</f:form.button>
В вашем контроллере:
public function createAction($formData, $createHobby = false)
{
...
}
Можете ли вы объяснить что-то еще … то, что вы показываете, не имеет ничего общего с typo3, я не знаю, куда вы это вставили, какую версию typo3, используя какое-либо дополнительное расширение?