2012-07-06 51 views
0

我在窗體中使用了驗證碼。當用戶向驗證碼提交無效答案時,頁面將重新加載用戶數據重新填充字段。我的問題是,是否有更好(或更容易)的方法來檢查選擇哪個下拉值。使用GET變量自動添加選擇到下拉菜單

這就是我現在的作品:

PHP

<?php 
    $state = $sf_params->get('state'); 
?> 

HTML

<span>State </span> 
    <select size="1" name="state"> 
      <option value="" selected="selected"></option> 
      <option value="AL" <?php if ($state == "AL") { echo "selected = 'selected'"; } ?>>Alabama</option> 
      <option value="AK" <?php if ($state == "AK") { echo "selected = 'selected'"; } ?>>Alaska</option> 
      <option value="AZ" <?php if ($state == "AZ") { echo "selected = 'selected'"; } ?>>Arizona</option> 
      <option value="AR" <?php if ($state == "AR") { echo "selected = 'selected'"; } ?>>Arkansas</option> 

有另一種解決方案來獲得GET變量,然後解析選項,尋找匹配的值?

回答

1

首先移動選擇的值到一個數組中的控制器一樣

$states = array('AL' => 'Alabama', ...); 

然後你可以用提到的助手j0k或腳走:
通過在控制器分配瓦爾。

$this->states = $states; 

在模板:

<?php foreach ($states as $key => $value): ?> 
<option value="<?php echo $key ?>" <?php if ($state == $value) { echo "selected = 'selected'"; } ?>><?php echo $value ?></option> 
<?php endforeach; ?> 

但我也建議使用助手。

+0

在這種情況下,我完全在視圖中工作。這種形式是被拉入模板的一部分。 – 2012-07-06 17:44:16

+0

好的,但你可以將變量傳遞給partial:<?php include_partial('mypartial',array('states'=> $ states))?>。因此,將代碼中的狀態存儲在代碼中,並將它們傳遞給partial,然後您至少可以使用foreach。 – ivoba 2012-07-06 17:55:41

+0

是的,這聽起來不錯。只是做最後的測試,但我認爲你的解決方案符合我的需要。 – 2012-07-06 18:02:09

2

嗯,自行構建表單並不是一個好習慣。通常你應該使用sfForm類的小部件等。

但是,如果你真的想建立這樣的東西,你應該從sf1.0中帶回一個幫助你構建表單標籤的好幫手。在你的情況下,該功能options_for_selectselect_tag可能是有用的:

  • options_for_select

    返回基於可選$options數組變量格式化一套<option>標籤。

  • select_tag

    返回<select>標籤,可選擇由<option>標籤。

options_for_select了作爲第二個參數,你要選擇的值。

所以,創建一個名爲lib/helper/FormHelper.php的文件,並將這兩個函數放在裏面。不要忘了加載助手在您的視圖:

<?php use_helper('Form') ?> 

並使用options_for_select & select_tag建立自己的選擇。

+0

此表單是從序列化數據生成的自定義表單。這就是爲什麼它是以傳統的HTML格式構建的。每個表單都被設置爲一個部分,並根據路由變量拉入模板。這已經在開發中,所以沒有回頭:) – 2012-07-06 17:32:08