These are chat archives for yiisoft/yii2/rus

1st
Oct 2017
Yaroslav
@dyar74
Oct 01 2017 14:46
привет
KarmaBot
@KarmaBot
Oct 01 2017 14:46
Приветствую тебя, @dyar74!
Yaroslav
@dyar74
Oct 01 2017 14:48
@dsx90 куда вывести? echo $phone;
dsx90
@dsx90
Oct 01 2017 16:02
Как выбранное значение DropDownList сохранить в базе с помощью Ajax в Yii2?
Yaroslav Chernousov
@lavros
Oct 01 2017 17:31
$('.dropdown-selector').change(function () { /* код по получению значения и посылке запроса на нужный экшн */ });
пример получения выбранного пункта в select: https://api.jquery.com/change/
dsx90
@dsx90
Oct 01 2017 17:33
@lavros сделал таким образом

<?php
$js = <<<JS
$('#launch-class').on('change', function(){
$.ajax({
url: 'ajax',
type: 'POST',
data : $(this).val(),
success: function(res){
console.log(res);
},
error: function(){
alert('Error!');
}
});
return false;
});
JS;

$this->registerJs($js);
?>

Yaroslav Chernousov
@lavros
Oct 01 2017 17:33
работает?
dsx90
@dsx90
Oct 01 2017 17:35
@lavros print_r($POST) показывает

update?id=13:969 Array
(
[2] =>
)

jquery.js?v=1506282721:9175 POST http://backend.yii2-core.dev/noty/default/index 404 (Not Found)

Yaroslav Chernousov
@lavros
Oct 01 2017 17:36
и что из этой информации ты понял?
dsx90
@dsx90
Oct 01 2017 17:36
@lavros но как сохранить это в экшене понять не могу
[2] это id выбранного значения
Yaroslav Chernousov
@lavros
Oct 01 2017 17:38
не, расскажи подробнее, что сделать хочешь, то пока картина не ясна.
пока я понял, что ты хочешь по изменения select что-то сохранить.
вот это вот "что-то" это что?
что должно произойти?
что где должно поменяться?
dsx90
@dsx90
Oct 01 2017 17:39
да мне нужно сохранить id селекта в ресурсе
Yaroslav Chernousov
@lavros
Oct 01 2017 17:39
ты в url адрес экшена укажи.
dsx90
@dsx90
Oct 01 2017 17:40
@lavros url: 'ajax',
Yaroslav Chernousov
@lavros
Oct 01 2017 17:41
экшн контроллер у тебя какой?
dsx90
@dsx90
Oct 01 2017 17:41
@dsx90 вопрост еще в том что сохраняю в ресурсе, значит мне нужно как то id ресурса передать для сохранения
public function actionAjax(){
    $model = new Launch;
    if( Yii::$app->request->isAjax){
        print_r($_POST);
    }
}
Yaroslav Chernousov
@lavros
Oct 01 2017 17:42
контроллер-то какой?
dsx90
@dsx90
Oct 01 2017 17:42
значит я попадаю в нужный экшн?
LaunchController
Yaroslav Chernousov
@lavros
Oct 01 2017 17:42
ну и смотри что тебе отладчик сказал: POST http://backend.yii2-core.dev/noty/default/index 404 (Not Found)
noty/default/index разве похоже на launch/ajax ?
dsx90
@dsx90
Oct 01 2017 17:43
А это фиг его знает что
@lavros если я специально ошибусь то во так вылазит
Yaroslav Chernousov
@lavros
Oct 01 2017 17:46
так вот, перед $js = <<<JS добавть нечто вроде $launchAjaxUrl = \yii\helpers\Url::to(['launch/ajax']), затем в url: 'ajax' -> url: "{$launchAjaxUrl}".
Yaroslav Chernousov
@lavros
Oct 01 2017 17:47
твой LaunchController где лежит?
dsx90
@dsx90
Oct 01 2017 17:48
namespace backend\controllers
@lavros данные ведь в экшн улетают раз ответ есть
Array
(
[2] =>
)
@lavros вопрост в том как их записать
Yaroslav Chernousov
@lavros
Oct 01 2017 17:52
$launchAjaxUrl = \yii\helpers\Url::to(['launch/ajax']);

$this->registerJs(<<<JS

$('#launch-class').on('change', function(){
     $.ajax({
         url: '{$launchAjaxUrl}',
         type: 'POST',
         data : $(this).val(),
         success: function(res){
             console.log(res);
         },
         error: function(){
             alert('Error!');
         }
     });
});
JS
);
?>
так попробуй.
он тебе пустой массив показал.
ты бы для начала проверил, что у тебя возращает $(this).val().
dsx90
@dsx90
Oct 01 2017 17:54
так а если я меняю значение в DROP
Yaroslav Chernousov
@lavros
Oct 01 2017 17:54
перед $.ajax сделай console.log($(this).val());
глянь, что там.
dsx90
@dsx90
Oct 01 2017 17:56
@lavros так если я меняю значение в DropDownList то тут меняется
@lavros 2 показало
Yaroslav Chernousov
@lavros
Oct 01 2017 17:58
ну ок, раз получаешь, делай дальнейшие действия.
dsx90
@dsx90
Oct 01 2017 17:59
@lavros а что делать то? как в базу записать?
Yaroslav Chernousov
@lavros
Oct 01 2017 18:01
что записать-то?
dsx90
@dsx90
Oct 01 2017 18:02
@lavros мне надо это значение записать в таблицу Launch со значением class
dsx90
@dsx90
Oct 01 2017 18:30
@lavros чтоб избавится от ключ значение сделал так. теперь получаю чистое значение. А записать тоже не получается
@lavros public function actionUpdate($id)
{
$model = $this->findModel($id);
    if( Yii::$app->request->isAjax){
        $isValid = $model->validate();
        if($isValid){
            $model->class = key($_POST);
            $model->save(false);
        }
    }

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}
public function actionUpdate($id)
{
$model = $this->findModel($id);
    if( Yii::$app->request->isAjax){
        $isValid = $model->validate();
        if($isValid){
            $model->class = key($_POST);
            $model->save(false);
        }
    }

    if ($model->load(Yii::$app->request->post()) && $model->save()) {
        return $this->redirect(['view', 'id' => $model->id]);
    } else {
        return $this->render('update', [
            'model' => $model,
        ]);
    }
}
что то не хочет он полностью брать