SymfonyHelper-select tag
From LeakonWiki
我们做数据库设计时,会用数字标记某条记录的状态。最简单的例子,一个 gender 字段,是 tinyint 类型,用 1 代表男性,2 代表女性。
在设计 html 页面编辑这条记录时,我们总要写好多 html 代码,很麻烦。
用 Symfony 的 select_tag 可以非常方便地帮我们完成这些复杂的工作。
下面介绍一个实例。
有一个项目,需要提交问题处理记录,表单有一项“优先级”,分为 6 种级别,希望可以用下拉列表进行选择。
达到这样的效果,很简单,用默认的 helper 即可:
// issue/templates/editSuccess.php
echo select_tag('priority', options_for_select(IssuePeer::listAllPriority(), $issue->getPriority()));
下面是 IssuePeer::listAllPriority() 的定义:
// lib/model/IssuePeer.php
public static function listAllPriority() {
$arrPriorities = array(
10 => '立即',
20 => '特急(12小时内解决)',
30 => '急(24小时内解决)',
40 => '一周内解决',
50 => '一月内解决',
60 => '其他',
);
return $arrPriorities;
}
还有另外一个函数,是针对于对象的 object_select_tag:
// template
echo object_select_tag($domain, 'getObjectId',
array (
'related_class' => 'Object',
'peer_method' => 'getSortedObject',
'control_name' => 'object_id',
'include_blank' => true,
)
)
// Peer
static public function getSortedObject() {
$c = new Criteria();
$c->addAscendingOrderByColumn(TablePeer::NAME);
$rs = TablePeer::doSelect($c);
return $rs;
}
object_select_tag 函数需要一个 peer_method,注意这个参数的静态方法,必须返回一个对象数组,并且数组对应的对现的字段必须有一个 toString 方法。

