假设您想查找客户。您的源端点可能是控制器上的一个操作,可能专用于提供自动完成数据。
主要需要注意的是预期数据的格式:
[{"id":123,"label":"Some Customer","value":"Some Customer (ID#123)"},...
“标签”和“值”让您有机会显示下拉列表的替代字符串以及最终选择的内容。
这是一个例子。
class Service_AutocompleteController extends Zend_Controller_Action
{
/**
* The query / q for the auto completion
*
* @var string
*/
protected $_term;
/**
* @see Zend_Controller_Action::init()
*/
public function init()
{
$this->_term = (isset($this->_request->term)) ? $this->_request->term : null;
}
/**
* Serve up JSON response for use by jQuery Autocomplete
*/
public function customerLookupAction()
{
// Disable the main layout renderer
$this->_helper->layout->disableLayout();
// Do not even attempt to render a view
$this->_helper->viewRenderer->setNoRender(true);
$query = "
SELECT TOP 50
c.id AS id,
c.name + '(ID#' + c.id + ')' AS label,
c.name AS value
FROM customer c
WHERE $label LIKE ?
ORDER BY c.name";
$db = Zend_Registry::get(SOME_DB_ADAPTER);
$results = $db->fetchAll($query, array('%' . $this->_term . '%'));
echo Zend_Json::encode($results);
}
}
有时人们会更进一步,并有一个视图助手来发送回 JSON,您可以通过这种方式删除控制器操作中的一些重复代码。