2012-07-06 48 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