2013-06-25 42 views
0

我有一個提交按鈕保存,保存和關閉,保存和查看,並保存和添加,像往常一樣在TYPO3的形式。每個按鈕都是<input type='image'>項目,唯一的區別是inputname參數。在我的控制器中,如何確定點擊了哪個提交按鈕,以便重定向到正確的操作?TYPO3:在extbase中提交按鈕的名稱

回答

0

我遇到的第一個問題是<input>的名稱不對。爲了得到正確的名字,我必須使用派生自AbstractFormFieldViewHelper的ViewHelper來構建標籤。

既然<input>標記呈現正確的方式,我可以看到點擊<input>的名稱爲$this->request->arguments

爲了完整起見,這裏是我使用的視圖助手的代碼:

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'); 
    } 
} 
0

您不應該重定向到控制器的操作。單擊某個按鈕時最好調用正確的操作。爲了保持邏輯清晰,您可以使用f:link.action視圖幫助器。這裏有一個關於視圖的好文檔:ViewHelper Reference。您可以將操作和控制器屬性設置爲此視圖幫助器。所以不需要決定控制器中哪個按鈕被點擊。要保留並傳遞表單數據,您應該使用 ViewHelpers並將表單數據寫入對象。

+0

我的表單提交'創建'或'更新'動作。從那個動作中,我需要重定向到'列表'或'新'動作,具體取決於哪個提交按鈕被點擊。 –