使用GET变量自动将所选内容添加到下拉菜单

时间:2012-07-06 15:14:59

标签: forms drop-down-menu symfony1 get symfony-1.4

我在表单中使用验证码。当用户向验证码提交无效答案时,页面将重新加载使用用户数据重新填充字段。我的问题是,是否有更好(或更简单)的方法来检查选择了哪个下拉值。

这就是我现在的工作原理:

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变量,然后解析选项,寻找匹配的值?

2 个答案:

答案 0 :(得分:2)

嗯,自己构建表单并不是一个好习惯。通常你应该使用sfForm类等的widget。

但是,如果你真的想要构建这种东西,你应该从sf1.0带回一个帮助你构建表单标签的好帮手。在您的情况下,函数options_for_selectselect_tag可能很有用:

  • options_for_select

      

    根据可选的<option>数组变量返回格式化的$options标记集。

  • select_tag

      

    返回<select>标记,可选择包含<option>个标记。

options_for_select将第二个参数作为您想要的选定值。

所以,只需创建一个名为lib/helper/FormHelper.php的文件并将这两个函数放入其中。不要忘记在视图中加载帮助程序:

<?php use_helper('Form') ?>

使用options_for_select&amp; select_tag来构建您的选择。

答案 1 :(得分:1)

首先将select的值移动到Controller中的数组

$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; ?>

但我也建议使用帮手。