Новые значения в Selecet2 как определить что они новые?

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
Vi_ru_S
Сообщения: 61
Зарегистрирован: 2018.08.14, 07:39
Откуда: Владивосток
Контактная информация:

Новые значения в Selecet2 как определить что они новые?

Сообщение Vi_ru_S »

Всем привет. Подскажите пожалуйста как можно реализовать добавление новых элементов option в select. Меня интересует именно сохранение. Как это должно выглядеть на стороне сервера.

Код: Выделить всё

echo $form->field($model, 'id_serial_number')->widget(Select2::classname(), [

        'options' => [
            'placeholder' => 'Поиск серийного номера ...',
            'id' => 'MySelecet2',
        ],

        'pluginOptions' => [
            'tags' => true,
            'allowClear' => true,
            'minimumInputLength' => 3,
            'language' => 'ru',
            'ajax' => [
                'url' => Url::to(['catalog_serial_number/ajax-list']),
                'dataType' => 'json',
                'data' => new JsExpression('function(params) { return {q:params.term}; }'),
            ],
            'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
            'templateResult' => new JsExpression('function(name) { return name.text; }'),
            'templateSelection' => new JsExpression('function (name) { return name.text; }'),
        ],
    ]);
Есть такой код который формирует Select2. При попытки ввести какое либо значение происходит поиск значений через ajax на стороне сервера и при выборе этого значения тег option будет содержать параметр value с id элемента который был найден. Если значений не будет найдено будет происходить добавление нового тега option с параметром value которые были введены в input как мне определить на стороне сервера и обработать последующие сохранение данных? Если пользователь выберет какой либо элемент то валуе например будет содержать id 102 но не исключен и такой вариант что пользователь может просто ввести 102 и данные будут тогда в таком случае не корректны
В действительности все иначе чем на самом деле. Антуан де Сент Экзюпери
NorthugP
Сообщения: 8
Зарегистрирован: 2018.04.25, 09:16

Re: Новые значения в Selecet2 как определить что они новые?

Сообщение NorthugP »

Привет. Совсем недавно тоже столкнулся с этой проблемой. У меня пользователи должны были вводить только числа. Хорошего решения не нашел. Поэтому придумал в базу у элемента записывать уникальный хеш. Потом при загрузке в select брал уже массив не [id] => Значение, а [hash] => Значение. Ну и пользователь вряд ли уже введет существующий хеш. Ну а вообще конечно не хотелось бы держать лишнее поле
Аватара пользователя
Vi_ru_S
Сообщения: 61
Зарегистрирован: 2018.08.14, 07:39
Откуда: Владивосток
Контактная информация:

Re: Новые значения в Selecet2 как определить что они новые?

Сообщение Vi_ru_S »

NorthugP писал(а): 2018.10.25, 18:43 Привет. Совсем недавно тоже столкнулся с этой проблемой. У меня пользователи должны были вводить только числа. Хорошего решения не нашел. Поэтому придумал в базу у элемента записывать уникальный хеш. Потом при загрузке в select брал уже массив не [id] => Значение, а [hash] => Значение. Ну и пользователь вряд ли уже введет существующий хеш. Ну а вообще конечно не хотелось бы держать лишнее поле
А есть исходники? что бы поковырять да разобраться. Меня кстати осенила идея, но не знаю на сколько она правильна. Что если в value запихать не id а text, а потом проверять по базе похожие значения, и если их нет то создавать новые? Не знаю просто на сколько это правильно так как недавно начал изучать этот фрукт :D :D
В действительности все иначе чем на самом деле. Антуан де Сент Экзюпери
NorthugP
Сообщения: 8
Зарегистрирован: 2018.04.25, 09:16

Re: Новые значения в Selecet2 как определить что они новые?

Сообщение NorthugP »

Vi_ru_S писал(а): 2018.10.25, 19:41 А есть исходники? что бы поковырять да разобраться. Меня кстати осенила идея, но не знаю на сколько она правильна. Что если в value запихать не id а text, а потом проверять по базе похожие значения, и если их нет то создавать новые? Не знаю просто на сколько это правильно так как недавно начал изучать этот фрукт :D :D
Ну так я в общем то про тоже. Хэш это та же самая текстовая строка, уникальная во всей таблице будет. Я просто записывал в нее что то типо md5(time().$model->name). И в валидации поставил ["hash", "unique"] на всякий случай
Аватара пользователя
Vi_ru_S
Сообщения: 61
Зарегистрирован: 2018.08.14, 07:39
Откуда: Владивосток
Контактная информация:

Re: Новые значения в Selecet2 как определить что они новые?

Сообщение Vi_ru_S »

Нашел решение которое для меня подходит

View

Код: Выделить всё

<?php
use yii\jui\AutoComplete;
use yii\widgets\ActiveField;
?>
    <?=
    $form->field($model, 'id_serial_number')->widget(yii\jui\AutoComplete::classname(), [
        'clientOptions' => [
            'dataType' => 'json',
            'minLength' => 3,
            'source' => Url::to(['catalog_serial_number/autocomplete']),
        ],
        'options' => [
            'class' => 'form-control'
        ]
    ]);
    ?>



Controller

Код: Выделить всё

    public function actionAutocomplete($term = null) {

        Yii::$app->response->format = Response::FORMAT_JSON;
        if (!is_null($term)) {

            $data = array_values(CatalogSerialNumber::find()->select(['name as label'])->where(['like', 'name', $term])->limit(20)->asArray()->all());
        }

        return $data;
    }
В действительности все иначе чем на самом деле. Антуан де Сент Экзюпери
Ответить