2011-11-07 47 views
0

如何重新使用相同的控制器這裏是我的觀點的一部分:通過不同的形式輸入

echo $this->Form->create("Provider", array('action' => 'view_admit_lookup', '')); 
echo $this->Form->input("last_name", array('label' => 'Doctor Last Name')); 
echo $this->Form->submit('Search'); 
echo "<br><br>"; 

$alphabet = array(
    "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", 
    "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", 
    "Y", "Z"); 
foreach($alphabet as $letter): 
    // create the row of buttons that are responsible for the search. 
    echo $this->Form->button($letter, array('action' => 'view_admit_lookup')); 
endforeach; 

現在,我希望能夠修改和再利用view_admit_lookup。

這裏是我的控制器方法:

function view_admit_lookup($letter) { 
    echo "<pre>The letter is: ".$letter."</pre>"; 

    // here we begin searching for whatever we need. 
    if(!empty($this->data['Provider']['last_name'])) { 
     $this->set('provider', 
      $this->Provider->find('all', 
             array('conditions' => 
              array('Provider.last_name LIKE' => 
              $this->data['Provider']['last_name'].'%'), 
              'order' => 
              array('Provider.last_name ASC', 
               'Provider.first_name ASC'), 
              ) 
           ) 
       ); 
    } 

    // set the title and the default layout. 
    $this->set('title_for_layout', 'Admit Lookup'); 
    $this->layout = 'default'; 
} 

我如何「獲取」與輸入(按鈕或文本字段)相關聯的信,並基於該值的特定操作?

+3

在一個正切線上,而不是'$ alphabet = array'('A','B','C',...'Z');',可以用'$ alphabet = range('A ','Z');'http://php.net/range – Farray

回答

1

當前向$this->Form->button()添加「操作」的方法不正確。根據Cake文檔,"$options is used primarily to specify HTML tag attributes"。按鈕輸入不具有操作屬性。 action屬性屬於表單元素。

在效應初探到您的評論:
沒有目的$this->Form->button($letter, array('action' => 'view_admit_lookup'));蛋糕的這一行應該會產生以下HTML:

<input type="button" value="A" action="view_admit_lookup"> 

HTML的這行沒有意義,也不會真正做任何東西。你應該閱讀HTML表單,因爲它看起來並沒有完全理解它們是如何工作的。推薦閱讀:

你的問題是,所有的按鈕是相同的形式沒有明確的方法來發送對應於點擊的按鈕信的一部分。 2種方式,我認爲會的工作最簡單的你是...

  1. HTML
    爲每個按鈕創建一個單獨的<form>元素。每個表格都可以通過兩種方式中的一種:

    1. 將相應的字母添加到表單的操作中。
    2. 將相應的字母添加到每個表單中隱藏的<input>元素。

    然後你從一個標準的<input>按鈕更改按鈕,一個<submit>按鈕,它會提交一份單獨的表格對每個字母按鈕。

    事情是這樣的:

    <form action="view_admit_lookup/a" method="get"> 
        <input type="submit" value="A"> 
    </form> 
    <form action="view_admit_lookup/b" method="get"> 
        <input type="submit" value="B"> 
    </form> 
    <form action="view_admit_lookup/c" method="get"> 
        <input type="submit" value="C"> 
    </form> 
    ... 
    
  2. 的JavaScript
    與所有的字母按鍵1個<form>元素,捕捉每一個按鈕的click行動,JavaScript函數。使用此功能用點擊數據填充隱藏的<input>並提交表單。

    事情是這樣的:

    <form action="view_admit_lookup" method="get"> 
        <input type="hidden" name="VAL" id="VAL"> 
        <input type="submit" value="A" onclick="return setVAL('a');"> 
        <input type="submit" value="A" onclick="return setVAL('a');"> 
        ... 
    </form> 
    <script type="text/javascript"> 
    function setVAL(letter){ 
        document.getElementById('VAL').value = letter; 
        return true; 
    } 
    </script> 
    

根據您選擇的方法,您可以訪問使用或者$this->params$this->data在你的控制器功能的信。

+0

等一下,CakePHP生成一個不能用於任何東西的按鈕? – gp443

+0

@ gp443這不是Cake的錯誤 - 一個「bog標準」HTML''什麼也不做,除非你將它掛接到表單提交或其他支持JavaScript的操作。這是一個HTML的東西。 – Farray

+0

那麼這個服務的目的是什麼: echo $ this-> Form-> button($ letter,array('action'=>'view_admit_lookup')); – gp443