我想在我的项目中进行搜索。我用的是打字,但不起作用。这是我的代码:
<?php
echo '<label class="control-label">Select Repository</label>';
$template = '<div><p class="repo-language">{{no_telepon}}</p>' .
'<p class="repo-name">{{nama}}</p>' .
'<p class="repo-description">{{email}}</p></div>';
echo Typeahead::widget([
'name' => 'twitter_oss',
'options' => ['placeholder' => 'Filter as you type ...'],
'dataset' => [
[
'prefetch' => Penerima::find()->all(),
'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('value')",
'display' => 'value',
'templates' => [
'notFound' => '<div class="text-danger" style="padding:0 8px">Unable to find repositories for selected query.</div>',
'suggestion' => new JsExpression("Handlebars.compile('{$template}')")
]
]
]
]);
?>
这个问题被问了很长时间。
我也面临同样的问题,但我能解决这个问题。
为了将来参考,我添加了这篇文章。
在控制器中
$result = SampleModel::find()
->select('Attribute_name')
->where('name LIKE "%' . $searchParameter .'%"')
->asArray()
->all();
return Json::encode($result);
- 在这里,您需要将数据库值获取为"associative array",您可以使用"asArray()"获取该值
- 那么正如您所看到的Json编码的返回值
在您的"查看"中
<?php
echo Typeahead::widget([
'name' => 'sampleName',
'options' => ['placeholder' => 'Filtering data ...'],
'scrollable' => true,
'pluginOptions' => ['highlight'=>true],
'dataset' => [
[
'remote' => [
'url' => Yii::$app->urlManager->createUrl(['sample/action']) .
'?searchParameter=%QUERY',
'wildcard' => '%QUERY'
],
'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('Atribute_name')",
'display' => 'Atribute_name',
'limit' => 10,
],
],
'pluginEvents' => [
'typeahead:select' => 'function(e, s) {
EnableUserDetailsTypeAhead(s);
}',
]
]);
?>
这里没有什么需要考虑的。
- 调用控制器动作。你可以做到
Yii::$app->urlManager->createUrl(['sample/action']) .
'?searchParameter=%QUERY',
'wildcard' => '%QUERY'
],
- 必须提供数据集中的以下行
'datumTokenizer' => "Bloodhound.tokenizers.obj.whitespace('Atribute_name')",
'display' => 'Atribute_name',
您将获得预期的数据。
我已经测试过这个示例代码,它正在运行
来自文档:
prefetch
:数组,prefetch
选项对象的配置。有关可以为此参数设置的选项,请参阅文档。返回数据必须经过Json编码并转换为格式为[['value' => 'data1'], ['value' => 'data2'],...]
的关联数组,其中value
是display
中设置的固定key
您传递的是一个对象数组,而不是键值对数组。可以使用asArray
创建对象列表。您需要将display
更改为包含数据的字段的名称:
'prefetch' => Penerima::find()->select('title')->asArray()->all(),