0

我有一个带有提交按钮的表单,保存、保存和关闭、保存和查看、保存和添加,就像在 TYPO3 中一样。每个按钮都是一个<input type='image'>项目,唯一的区别nameinput. 在我的控制器中,如何确定单击了哪个提交按钮,以便重定向到正确的操作?

4

2 回答 2

0

我遇到的第一个问题<input>是不正确的名称。为了获得正确的名称,我必须使用派生自AbstractFormFieldViewHelper.

现在<input>标签以正确的方式呈现,我可以看到点击<input>进入的名称$this->request->arguments

为了完整起见,这里是我使用的 ViewHelper 的代码:

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()));
    }
}

这是控制器中重定向到正确页面的代码:

private function submitRedirect($myobject) {
    if ($this->request->hasArgument('_savedok')) {
        $this->redirect('edit', NULL, NULL, array('myobject'=>$myobject));
    }
    if ($this->request->hasArgument('_savedokclose')) {
        $this->redirect('list');
    }
    if ($this->request->hasArgument('_savedoknew')) {
        $this->redirect('new');
    }
}
于 2013-06-27T18:27:58.683 回答
0

您不应重定向到来自控制器的操作。最好在单击某个按钮时调用正确的操作。为了保持逻辑清晰,您可以使用f:link.actionviewhelper 例如。这是关于 viewhelpers 的一个很好的文档:ViewHelper Reference。您可以为此 viewhelper 设置一个操作和一个控制器属性。因此无需决定在控制器中单击了哪个按钮。要保留和传递表单数据,您应该使用f:formViewHelpers 并将表单数据写入对象。

于 2013-06-26T07:50:27.177 回答