2012-04-16 59 views
9

在CakePHP 1.3可以創建具有多個表單提交按鈕:CakePHP的2.0確定哪些提交按鈕被點擊

echo $this->Form->submit('Submit 1', array('name'=>'submit'); 
echo $this->Form->submit('Submit 2', array('name'=>'submit'); 

並檢測其提交按鈕被按下在控制器與:

if (isset($this->params['form']['submit']) && $this->params['form']['submit'] == "Submit 1") { 
    // first button clicked 
} 

在CakePHP中,未設置$ this-> params ['form'],並且點擊的按鈕值未出現在$ this-> request,$ this-> request-> data,$ this-> params中的任何位置,$ this-> data或$ _POST

如何確定在CakePHP 2.0中點擊了哪個按鈕?

在此先感謝。

編輯:

按照要求,這裏的表單的代碼:

<?php echo $this->Form->create('History', array('action'=>'add')); ?> 
<div class='submit'> 
<?php 
echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submit')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submit')); 
?> 
</div> 
<?php echo $this->Form->end()?> 

和表單的輸出:

<form action="/projects/kings_recruit/trunk/www/histories/add" id="HistoryAddForm" method="post" accept-charset="utf-8"> 
    <div style="display:none;"> 
    <input name="_method" value="POST" type="hidden"> 
    </div> 
    <div class="submit"> 
    <input name="submit" value="Yes" type="submit"> 
    <input name="submit" value="No" type="submit"> 
    </div> 
</form> 
+0

你還應該發佈輸出的html - 提交按鈕在你的視圖中看起來像什麼!另外:你有一個

標籤你的表單? – mark 2012-04-16 13:50:52

回答

0

在2.0沒有$this->params['form']了 所有形式助手張貼字段結束在$this->data(這反而更有意義)

所以

if (!empty($this->data['submit']) && $this->data['submit'] == "Submit 1") {} 

注意!空()是在這裏更好。

PS:你可以使用我的增強升級殼來取代它在你的代碼:https://github.com/dereuromark/upgrade

其命令

cake Upgrade.Upgrade request 

(https://github.com/dereuromark/upgrade/blob/ master/Console/Command/UpgradeShell.php#L833)

+0

我在$ this-> data中看不到「Submit 1」:-( 另外,我沒有升級1.3項目,這是一個全新的2.0項目。 – RichardAtHome 2012-04-16 13:07:52

+0

也沒有在$ _POST中看到它。已更新我的問題,以反映這 – RichardAtHome 2012-04-16 13:16:37

0
if (!empty($this->request->data['submit']) && $this->request->data['submit'] == "Yes") { 
// do your stuff 
} 
+0

正如我在前面的回答(並更新了問題,以反映這一點),我沒有看到'提交'$ this-> data – RichardAtHome 2012-04-17 08:09:00

+0

@RichardAtHome不是'$ this-> data ',這是'$ this-> request-> data',請用'$ this-> request-> data'重新檢查代碼 – thecodeparadox 2012-04-17 08:17:58

+0

也不要在$ this-> request-> data中看到它(對不起,我認爲這是暗示我沒有看到它$ this->請求的觀點) – RichardAtHome 2012-04-17 10:44:58

7

不要對兩個提交按鈕使用相同的名稱。考慮下面這個例子:

<?php echo $this->Form->create(false); ?> 
<?php echo $this->Form->text('input'); ?> 
<?php echo $this->Form->submit('Yes', array('name' => 'submit1')); ?> 
<?php echo $this->Form->submit('No', array('name' => 'submit2')); ?> 
<?php echo $this->Form->end(); ?> 

調試($這個 - >請求 - >數據)將產生以下點擊「是」按鈕時:

array(
    'submit1' => 'Yes', 
    'input' => 'test' 
) 

這裏,它是當「無「按鍵:

array(
    'submit2' => 'No', 
    'input' => 'test' 
) 

要檢查哪個按鈕被點擊:

if (isset($this->request->data['submit1'])) { 
    // yes button was clicked 
} else if (isset($this->request->data['submit2'])) { 
    // no button was clicked 
} 
19

通常,對於兩個提交按鈕使用相同的名稱是一種不好的做法。 $ _POST和$ this-> request-> data中應該有一個「提交」鍵,我在CakePHP 2.1中測試了這個鍵。1,如下所示:

視圖代碼:

<?php echo $this->Form->create('Message', array('action'=>'test')); 
// Extra test input field 
echo $this->Form->input('test'); 
?> 

<div class='submit'> 
<?php 
echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submit')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submit')); 
?> 
</div> 
<?php echo $this->Form->end()?> 

的在控制器中$這 - >請求 - >數據:

array(
    'submit' => 'Yes', 
    'Message' => array(
     'test' => 'TestFieldTest' 
    ) 
) 

而在$ _POST:

array(
    '_method' => 'POST', 
    'data' => array(
     'Message' => array(
      'test' => 'TestFieldTest' 
     ) 
    ), 
    'submit' => 'Yes' 
) 

您也可以給兩個提交不同的名稱:

echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submitY')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submitN')); 

這樣你可以在$ _ POST或$這個 - >請求 - >數據不同的他們,因爲鑰匙將是的提交的名字:

array(
    'submitY' => 'Yes', 
    'Message' => array(
     'test' => 'foo' 
    ) 
) 

array(
    '_method' => 'POST', 
    'data' => array(
     'Message' => array(
      'test' => 'Bar' 
     ) 
    ), 
    'submitY' => 'Yes' 
) 

然後確定哪個按鈕被按下你可以使用簡單的isset($ _ POST [''])或$ this-> request-> data?

+0

最完整的答案imo。 – pbond 2012-05-06 00:32:40

+0

沒有看到這在我的表單後數組 - 即使是一個全新的項目:-S我會稍後探討和回到你身邊... – RichardAtHome 2012-05-11 08:56:46

+0

您是否使用任何自定義的過濾 - 像Codeigniter XSS或?這很奇怪。一個微不足道的問題是:你是否在正確的行動?表單是否指向正確的操作?嘗試使用提交的不同名稱。你能否也提供POST的內容? – 2012-05-11 09:05:19