0

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

这就是我现在所拥有的:

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

4

2 回答 2

2

好吧,自己构建表单并不是一个好习惯。通常你应该使用来自 sfForm 类等的小部件。

但是,如果你真的想构建这种东西,你应该从 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&select_tag来构建您的选择。

于 2012-07-06T15:38:26.450 回答
1

首先将选择的值移动到控制器中的数组中,例如

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

然后您可以使用提到的 Helper 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; ?>

但我也建议使用 Helper。

于 2012-07-06T17:21:39.957 回答