Передача значения input в Action

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Передача значения input в Action

Сообщение dunakov »

В общем при выборе врача Использую CategoryController в actionViewdoc работаю c моделью, выбираю что мне нужно и рендер с массивом.

Во вьюхе самой добавил бутстраповский календарь

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

<div class="form-group">
                    <!-- элемент input с id = datetimepicker1 -->
                    <div class="input-group" id="datetimepicker1">
                        <input type="text" class="form-control" />
                        <span class="input-group-addon">
                    <span class="glyphicon glyphicon-calendar"></span>
                        </span>
                    </div>
                </div>
Мне нужно чтобы при выборе дате значение с инпута
Данные попадали в тот же action

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

$cards = Card::find()->where(['data' =>$data])->asArray()->all();
Где $data полученное значение с того самого инпута бутстрапа.

И когда дата выбрана с инпуте, уже в вид возвращается массив cards

Или это нужно делать как виджет ?
Изучаю веб-программирование, не ругайтесь сильно)

AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Re: Передача значения input в Action

Сообщение AlexSergeev1990 »

Перечитал 10 раз ничего не понял....

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

AlexSergeev1990 писал(а):
2018.02.22, 10:10
Перечитал 10 раз ничего не понял....
В голове уже появилась идея/

Отправляю аяксом значение даты. В Action выполняются проверку, что если глобальный массив Get или Post не пуст, то присвоить переменной
$data значение из глобального массива и отправить во вьюху массив с нужными данными

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

$cards = Card::find()->where(['data' =>$data])->asArray()->all(); 
Правда моргания страницы при этом не избежать
Изучаю веб-программирование, не ругайтесь сильно)

Auramel
Сообщения: 80
Зарегистрирован: 2017.11.17, 14:39
Откуда: Russia, Ufa
Контактная информация:

Re: Передача значения input в Action

Сообщение Auramel »

Вешаем обработчик на событие change нужного элемента (у Вас это, если правильно понял, виджет-календарь), валидируем данные (чтобы было дд.мм.гггг или как Вам надо). Делаем AJAX запрос. Полученные данные обрабатываем и делаем

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

appendchild()
или

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

innerHTML .=
(как вариант) в нужное место.
Обычно, во что-то аля

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

<div id="output"></div>
или

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

<output id="output"></output>
. :)

AlexSergeev1990
Сообщения: 109
Зарегистрирован: 2017.06.22, 10:43

Re: Передача значения input в Action

Сообщение AlexSergeev1990 »

Если моментально без перезагрузки страницы делаешь через Ajax, в success просто указывешь в какой элемент передать, полученный ответ сервера.

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Передача значения input в Action

Сообщение andku83 »

dunakov писал(а):
2018.02.22, 10:15
Отправляю аяксом значение даты. В Action выполняются проверку, что если глобальный массив Get или Post не пуст...
тогда лучше проверяйте наличие/значение вашей переменной а не всего массива

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

В общем вот отпаврка Get-запроса аяксом

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

$(function () {

    $('#datetimepicker1').datetimepicker(
        {format: 'DD.MM.YYYY', locale: 'ru'}


	);

    $('#datetimepicker1').on("dp.change", function ()
    {

        var bes = $(".form-control").val()

        $.ajax(
            {
                url:'index.php?r=category/viewdoc',
                data: {a:bes},
                type: 'GET',
                success: function (res) {
                    alert(res);
                },
                error:function () {
                    alert('Error');
                }
            }
        );
    });
});

Но сервер не хочет обрабатывать и 400 ошибку возвращает. Хотя я смотрю и гет запрос построен правильно/
Изображение
Изучаю веб-программирование, не ругайтесь сильно)

someweb
Сообщения: 552
Зарегистрирован: 2017.03.09, 10:12

Re: Передача значения input в Action

Сообщение someweb »

Посмотрите дебаг панель Yii
Чтобы правильно задать вопрос, нужно знать бо́льшую часть ответа. Роберт Шекли.

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

Возможно это связано с тем, что http://localhost/basic/web/index.php?r=category/viewdoc
так у меня ошибка выдастся
А вот так http://localhost/basic/web/index.php?r= ... ewdoc&id=1

Запустится страница врача
Изучаю веб-программирование, не ругайтесь сильно)

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

Дебаг вот

Изображение
Изучаю веб-программирование, не ругайтесь сильно)

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Передача значения input в Action

Сообщение andku83 »

url:'index.php?r=category/viewdoc?id=1',
Последний раз редактировалось andku83 2018.02.22, 15:03, всего редактировалось 1 раз.

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

Хотя смысл дебага я понял. Отсутвует параметр id. Нужно сделать так чтобы вьюха запускаться могла и без id
Изучаю веб-программирование, не ругайтесь сильно)

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Передача значения input в Action

Сообщение andku83 »

dunakov писал(а):
2018.02.22, 15:03
... Нужно сделать так чтобы вьюха запускаться могла и без id
сомневаюсь вам же карты от какой-то конкретной категории получать нужно

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

shnir писал(а):
2018.02.22, 15:05
dunakov писал(а):
2018.02.22, 15:03
... Нужно сделать так чтобы вьюха запускаться могла и без id
сомневаюсь вам же карты от какой-то конкретной категории получать нужно
Но так сервер 400 возвращает. А я хочу отправить в контроллер дату, чтобы оно выбрало талоны у нужного врача по нужной дате.
Изучаю веб-программирование, не ругайтесь сильно)

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Передача значения input в Action

Сообщение andku83 »

возможно нужно отсылать и дату и ИД, все зависит от того что вам нужно

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

shnir писал(а):
2018.02.22, 15:11
возможно нужно отсылать и дату и ИД, все зависит от того что вам нужно
Сейчас action выглядит вот так

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

class CategoryController extends Controller
{
    public function actionViewdoc($id)
    {
        $id = Yii::$app->request->get('id');

        $doc = Doctor::find()->where(['id' =>$id])->asArray()->all();
        if(Yii::$app->request->isAjax)
        {
            debug($_POST);
        }


        return $this->render('viewdoc' ,compact('doc'));

    }
}
А что мне нужно) по задумке при выборе даты (благо есть событие смены даты и можно прикрутить сюда $('#datetimepicker1').on("dp.change", function ()) отправлять аякс запрос с текущей датой в контроллер. Контроллер запрос переварить, выбрать нужные данные ( Т е талоны у текущего врача по текущей дате) и вернуть их в виде массива. А я уже форичем выведу талоны во вьюхе.

но что-то пошло не так))
Изучаю веб-программирование, не ругайтесь сильно)

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Передача значения input в Action

Сообщение andku83 »

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

$.ajax(
                type: 'GET',

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

            debug($_POST);
где-то вы неоднозначны...

тогда как минимум

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

if (Yii::$app->request->isAjax && Yii::$app->request->isPost){
    debug(Yii::$app->request->post());

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

Я в Js тоже POST написал. Там всё ок.

Но такой вариант тоже не прокатывает

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

class CategoryController extends Controller
{
    public function actionViewdoc($id)
    {
        $id = Yii::$app->request->get('id');

        $doc = Doctor::find()->where(['id' =>$id])->asArray()->all();
        if (Yii::$app->request->isAjax && Yii::$app->request->isPost)
        {
            debug(Yii::$app->request->post());
        }

        return $this->render('viewdoc' ,compact('doc'));

    }
}
Он же $id ожидает. Мне что ли в самом аяксе формировать ссылки c id?

Конечно можно было сделать всё гораздо проще, просто сделать отдельный Action, но это ещё + вид, хотелось бы на странице доктора вывести. Хотя ещё есть вариант виджет
Изучаю веб-программирование, не ругайтесь сильно)

andku83
Сообщения: 988
Зарегистрирован: 2016.07.01, 10:24
Откуда: Харьков

Re: Передача значения input в Action

Сообщение andku83 »

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

$.ajax(
            {
                url:window.location,
попробуйте так

dunakov
Сообщения: 65
Зарегистрирован: 2018.02.19, 09:19
Откуда: Беларусь

Re: Передача значения input в Action

Сообщение dunakov »

shnir писал(а):
2018.02.22, 15:57

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

$.ajax(
            {
                url:window.location,
попробуйте так

Так аякс работает, но странно. Вывожу Success в логи, там

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

<pre>Array
(
    [a] => 22.02.2018
)
</pre>
всё верно, но и целая html-страница,

Ответ короче говоря вернул целый вид

А как сделать чтобы в ответ не попадал вид, а возвращало только то что в обработчике?
Так как оно выдаёт это

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

if (Yii::$app->request->isAjax && Yii::$app->request->isPost)
       {
          debug($_POST);
       }
+сам вид
Последний раз редактировалось dunakov 2018.02.22, 16:17, всего редактировалось 1 раз.
Изучаю веб-программирование, не ругайтесь сильно)

Ответить