SymfonyHelper-select tag

From LeakonWiki

Jump to: navigation, search

我们做数据库设计时,会用数字标记某条记录的状态。最简单的例子,一个 gender 字段,是 tinyint 类型,用 1 代表男性,2 代表女性。

在设计 html 页面编辑这条记录时,我们总要写好多 html 代码,很麻烦。

用 Symfony 的 select_tag 可以非常方便地帮我们完成这些复杂的工作。

下面介绍一个实例。

有一个项目,需要提交问题处理记录,表单有一项“优先级”,分为 6 种级别,希望可以用下拉列表进行选择。

select_tag.png

达到这样的效果,很简单,用默认的 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 方法。

Personal tools