Страница 1 из 2
Передача значения input в Action
Добавлено: 2018.02.22, 10:00
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
Или это нужно делать как виджет ?
Re: Передача значения input в Action
Добавлено: 2018.02.22, 10:10
AlexSergeev1990
Перечитал 10 раз ничего не понял....
Re: Передача значения input в Action
Добавлено: 2018.02.22, 10:15
dunakov
AlexSergeev1990 писал(а): ↑2018.02.22, 10:10
Перечитал 10 раз ничего не понял....
В голове уже появилась идея/
Отправляю аяксом значение даты. В Action выполняются проверку, что если глобальный массив Get или Post не пуст, то присвоить переменной
$data значение из глобального массива и отправить во вьюху массив с нужными данными
Код: Выделить всё
$cards = Card::find()->where(['data' =>$data])->asArray()->all();
Правда моргания страницы при этом не избежать
Re: Передача значения input в Action
Добавлено: 2018.02.22, 11:27
Auramel
Вешаем обработчик на событие change нужного элемента (у Вас это, если правильно понял, виджет-календарь), валидируем данные (чтобы было дд.мм.гггг или как Вам надо). Делаем AJAX запрос. Полученные данные обрабатываем и делаем
или
(как вариант) в нужное место.
Обычно, во что-то аля
или
.
Re: Передача значения input в Action
Добавлено: 2018.02.22, 11:36
AlexSergeev1990
Если моментально без перезагрузки страницы делаешь через Ajax, в success просто указывешь в какой элемент передать, полученный ответ сервера.
Re: Передача значения input в Action
Добавлено: 2018.02.22, 13:45
andku83
dunakov писал(а): ↑2018.02.22, 10:15
Отправляю аяксом значение даты. В Action выполняются проверку, что если глобальный массив Get или Post не пуст...
тогда лучше проверяйте наличие/значение вашей переменной а не всего массива
Re: Передача значения input в Action
Добавлено: 2018.02.22, 14:48
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 ошибку возвращает. Хотя я смотрю и гет запрос построен правильно/
Re: Передача значения input в Action
Добавлено: 2018.02.22, 14:55
someweb
Посмотрите дебаг панель Yii
Re: Передача значения input в Action
Добавлено: 2018.02.22, 14:57
dunakov
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:00
dunakov
Дебаг вот
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:02
andku83
url:'index.php?r=category/viewdoc?id=1',
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:03
dunakov
Хотя смысл дебага я понял. Отсутвует параметр id. Нужно сделать так чтобы вьюха запускаться могла и без id
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:05
andku83
dunakov писал(а): ↑2018.02.22, 15:03
... Нужно сделать так чтобы вьюха запускаться могла и без id
сомневаюсь вам же карты от какой-то конкретной категории получать нужно
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:09
dunakov
shnir писал(а): ↑2018.02.22, 15:05
dunakov писал(а): ↑2018.02.22, 15:03
... Нужно сделать так чтобы вьюха запускаться могла и без id
сомневаюсь вам же карты от какой-то конкретной категории получать нужно
Но так сервер 400 возвращает. А я хочу отправить в контроллер дату, чтобы оно выбрало талоны у нужного врача по нужной дате.
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:11
andku83
возможно нужно отсылать и дату и ИД, все зависит от того что вам нужно
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:17
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 ()) отправлять аякс запрос с текущей датой в контроллер. Контроллер запрос переварить, выбрать нужные данные ( Т е талоны у текущего врача по текущей дате) и вернуть их в виде массива. А я уже форичем выведу талоны во вьюхе.
но что-то пошло не так))
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:34
andku83
где-то вы неоднозначны...
тогда как минимум
Код: Выделить всё
if (Yii::$app->request->isAjax && Yii::$app->request->isPost){
debug(Yii::$app->request->post());
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:41
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, но это ещё + вид, хотелось бы на странице доктора вывести. Хотя ещё есть вариант виджет
Re: Передача значения input в Action
Добавлено: 2018.02.22, 15:57
andku83
Re: Передача значения input в Action
Добавлено: 2018.02.22, 16:11
dunakov
shnir писал(а): ↑2018.02.22, 15:57
попробуйте так
Так аякс работает, но странно. Вывожу Success в логи, там
всё верно, но и целая html-страница,
Ответ короче говоря вернул целый вид
А как сделать чтобы в ответ не попадал вид, а возвращало только то что в обработчике?
Так как оно выдаёт это
Код: Выделить всё
if (Yii::$app->request->isAjax && Yii::$app->request->isPost)
{
debug($_POST);
}
+сам вид