我有一个表单,提交按钮保存,保存和关闭,保存和查看,以及保存和添加,像往常一样在TYPO3中。每个按钮都是<input type='image'>
项,唯一的区别是name
的{{1}}参数。在我的控制器中,如何确定单击了哪个提交按钮,以便重定向到正确的操作?
答案 0 :(得分:0)
您不应该重定向到控制器的操作。单击某个按钮时,最好调用正确的操作。为了保持逻辑清晰,您可以使用f:link.action
viewhelper。以下是有关viewhelpers的详细文档:ViewHelper Reference。您可以为此viewhelper设置操作和控制器属性。因此无需确定在控制器中单击了哪个按钮。要保留并传递表单数据,您应该使用f:form
ViewHelpers并将表单数据写入对象。
答案 1 :(得分:0)
我遇到的第一个问题是<input>
的名称不正确。为了获得正确的名称,我必须使用派生自AbstractFormFieldViewHelper
的ViewHelper构建标记。
既然<input>
标记以正确的方式呈现,我就可以看到点击的<input>
到[{1}}的名称。
为了完整性,这里是我使用的ViewHelper的代码:
$this->request->arguments
以下是Controller中重定向到右页的代码:
class IconSubmitViewHelper extends \TYPO3\CMS\Fluid\ViewHelpers\Form\AbstractFormFieldViewHelper {
/**
* @var string
*/
protected $tagName = 'input';
/**
* Initialize the arguments.
*
* @return void
* @api
*/
public function initializeArguments() {
parent::initializeArguments();
$this->registerArgument('icon', 'string', 'Icon name', true, 'actions-document-close');
$this->registerTagAttribute('src', 'string', 'Image source', false, 'clear.gif');
$this->registerUniversalTagAttributes();
}
/**
* Renders an icon link as known from the TYPO3 backend
*
* @return string the rendered icon link
*/
public function render() {
$name = $this->getName();
$this->registerFieldNameForFormTokenGeneration($name);
$this->tag->addAttribute('type', 'image');
$this->tag->addAttribute('name', $name);
$this->tag->addAttribute('class', 'c-inputButton');
return \TYPO3\CMS\Backend\Utility\IconUtility::getSpriteIcon($this->arguments['icon'], array('title' => $this->arguments['title'], 'html' => $this->tag->render()));
}
}