我在表单中使用验证码。当用户向验证码提交无效答案时,页面将重新加载使用用户数据重新填充字段。我的问题是,是否有更好(或更简单)的方法来检查选择了哪个下拉值。
这就是我现在的工作原理:
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变量,然后解析选项,寻找匹配的值?
答案 0 :(得分:2)
嗯,自己构建表单并不是一个好习惯。通常你应该使用sfForm类等的widget。
但是,如果你真的想要构建这种东西,你应该从sf1.0带回一个帮助你构建表单标签的好帮手。在您的情况下,函数options_for_select
和select_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; ?>
但我也建议使用帮手。