Przejdź do głównej zawartości
PHP Ecosystem
Explore

Usage examples

Ta treść nie jest jeszcze dostępna w Twoim języku.

These recipes run in an application view and controller. Validate every submitted value on the server as shown in the configuration guide.

use yii\base\Model;
final class PostForm extends Model
{
public $category = '';
public $tags = [];
public $keywords = '';
public function rules(): array
{
return [
['category', 'required'],
['category', 'in', 'range' => ['php', 'yii']],
['tags', 'filter', 'filter' => static fn ($value) => $value === '' ? [] : $value],
['tags', 'each', 'rule' => ['in', 'range' => ['php', 'yii', 'js'], 'skipOnEmpty' => false]],
['keywords', 'string', 'max' => 80],
];
}
}

Redisplay only a scalar value after a rejected submission, and connect the help and error elements to the field.

use yii2\extensions\selectize\Selectize;
echo $form->field($model, 'category', ['errorOptions' => ['id' => 'category-error']])->widget(Selectize::class, [
'items' => ['php' => 'PHP', 'yii' => 'Yii'],
'options' => [
'prompt' => 'Choose a category',
'value' => is_string($model->category) ? $model->category : '',
'aria-describedby' => 'category-help category-error',
'aria-invalid' => $model->hasErrors('category') ? 'true' : 'false',
],
'clientOptions' => ['maxItems' => 1],
]);
use yii2\extensions\selectize\Selectize;
echo $form->field($model, 'tags')->widget(Selectize::class, [
'items' => ['php' => 'PHP', 'yii' => 'Yii', 'js' => 'JavaScript'],
'options' => [
'multiple' => true,
'value' => is_array($model->tags) ? array_values(array_filter($model->tags, 'is_string')) : [],
],
'clientOptions' => ['plugins' => ['remove_button']],
]);

A text input submits one comma-separated string and ignores items.

use yii2\extensions\selectize\Selectize;
echo $form->field($model, 'keywords')->widget(Selectize::class, [
'type' => Selectize::TYPE_TEXT,
'options' => ['value' => is_string($model->keywords) ? $model->keywords : ''],
'clientOptions' => ['create' => true, 'delimiter' => ','],
]);

Supply the preselected value and its label in items; the widget loads further options from the endpoint.

use yii\helpers\Html;
use yii2\extensions\selectize\Selectize;
echo Html::label('Remote tag', 'remote-tag');
echo Selectize::widget([
'id' => 'remote-tag',
'name' => 'remote',
'value' => 'php',
'items' => ['php' => 'PHP'],
'loadUrl' => ['post/tags'],
'queryParam' => 'search-term',
'clientOptions' => ['maxItems' => 1],
]);

The endpoint returns a JSON array of value/text rows and rejects malformed or oversized queries. Add the application’s authentication and authorization, and query the database with bound parameters.

use Yii;
use yii\filters\VerbFilter;
use yii\web\Controller;
use yii\web\Response;
final class PostController extends Controller
{
public function behaviors(): array
{
return ['verbs' => ['class' => VerbFilter::class, 'actions' => ['tags' => ['GET']]]];
}
public function actionTags(): array
{
Yii::$app->response->format = Response::FORMAT_JSON;
$query = Yii::$app->request->get('search-term', '');
if (!is_string($query) || mb_strlen($query) > 80) {
Yii::$app->response->statusCode = 400;
return [];
}
$rows = [];
foreach (['php' => 'PHP', 'yii' => 'Yii', 'js' => 'JavaScript'] as $value => $text) {
if ($query !== '' && stripos($text, $query) !== false) {
$rows[] = ['value' => $value, 'text' => $text];
}
}
return $rows;
}
}

Give touch users an accessible way to clear a single selection, and reinitialize through jQuery(element).yiiSelectize() after replacing markup so the widget keeps its accessible attributes. See events and lifecycle for fragment replacement and custom handlers.

document.getElementById("clear-remote").addEventListener("click", function () {
var control = document.getElementById("remote-tag").selectize;
control.clear();
control.focus();
});
document.getElementById("reinitialize").addEventListener("click", function () {
var element = document.getElementById("remote-tag");
var control = element.selectize;
var value = control.getValue();
var options = Object.assign({}, control.settings, {
options: Object.values(control.options),
items: control.items.slice(),
render: control.settings_user.render,
});
control.destroy();
jQuery(element).yiiSelectize(options);
element.selectize.setValue(value);
});

Back to documentation