Имеется форма в панели администратора для создания пользователя. В этой же форме заполняются услуги пользователя и рабочие часы. Услуги используют табличный ввод, рабочие часы - аналогично.
При создании все заполняется корректно, но при попытке отредактировать пользователя ( Все данные также выводятся корректно ) кнопка submit "неактивна" - клик происходит, функция в js
submit срабатывает, но форма не отправляется ( не происходит переадресации по текущему action формы).
Код страницы:
<?php $form = ActiveForm::begin([
'options' => ['data-validate'=>'timesinterval'],
])?>
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Основная информация</h6>
</div>
<div class="card-body">
<div class="user">
<div class="form-group row">
<div class="col-sm-6 mb-3 mb-sm-0">
<?= Html::activeTextInput($model, 'name', ['class'=>'form-control form-control-user','placeholder' => 'Введите Имя']); ?>
</div>
</div>
<div class="form-group">
<?= Html::activeTextInput($model, 'tel', ['class'=>'form-control form-control-user','placeholder' => 'Введите телефон','data-mask'=>'tel','readonly'=>isset($model->id)]); ?>
</div>
</div>
</div>
</div>
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Услуги</h6>
</div>
<div class="card-body">
<div class="user">
<?php if(isset($modelSer) and isset($service)):for($i = 0; $i < count($modelSer); $i++):?><?=
Html::activeInput('hidden', $modelSer[$i], "[$i]service_id", ['value'=>$service[$i]['id']]).'
<div class="form-group row">
<div class="col-sm-6 mb-3 mb-sm-0">
<div class="custom-control custom-checkbox mr-3">
'.Html::activeInput('checkbox', $modelSer[$i], "[$i]status",
['id'=>'service'.$i,'class'=>'custom-control-input', 'checked'=>isset( $modelSer[$i]->status)?( $modelSer[$i]->status=='active'):false]).'
<label class="custom-control-label" for="service'.$i.'">'.$service[$i]['service_name'].'</label>
</div>
</div>
<div class="col-sm-6">
'.Html::activeInput('text', $modelSer[$i], "[$i]time", ['class'=>'form-control form-control-user','placeholder' => 'Время','data-mask'=>'time']).'
</div>
</div>'?>
<?php endfor; endif;?>
</div>
</div>
</div>
<div class="card shadow mb-4">
<div class="card-header py-3">
<h6 class="m-0 font-weight-bold text-primary">Часы</h6>
</div>
<div class="card-body">
<div class="user">
<div class="form-group">
<div class="input-group input-group-joined">
<input type="text" id="timesinterval-time-main" class="form-control form-control-user" placeholder="Время" data-mask="time" inputmode="text">
<div class="input-group-append">
<span class="d-flex align-items-center px-3">
<button class="btn btn-teal" type="button" id="add_time">
<i class="fad fa-calendar-plus"></i>
</button>
</span>
</div>
</div>
</div>
<div class="form-group row flex-wrap" id="add_time_container">
<?php if(isset($timeInterval) and isset($timeInterval[0]['id'])):?>
<?php foreach ($timeInterval as $inT=>$time):?>
<div class="col-sm-4 mb-2" data-delete-time-c="">
<div class="input-group input-group-joined">
<?= Html::activeTextInput($time, "[$inT]time", ['class'=>'form-control form-control-user','placeholder' => 'Время','data-mask'=>'time','readonly'=>true]);?>
<div class="input-group-append">
<span class="d-flex align-items-center px-3">
<button class="btn btn-red" type="button" data-delete-time="">
<i class="fad fa-calendar-times"></i>
</button>
</span>
</div>
</div>
</div>
<?php endforeach; endif; ?>
</div>
</div>
</div>
</div>
<?= Html::submitButton('Сохранить',['class'=>'btn btn-primary btn-user btn-block']); ?>
<?php ActiveForm::end() ?>
Код контроллера:
public function actionCreate()
{
$model = new SignupForm();
$timeInterval = new TimesInterval();
$service = Service::find()->all();
$modelSer = [new ServiceTime()];
for($i = 1; $i < count($service); $i++) {
$modelSer[] = new ServiceTime();
}
$post = Yii::$app->request->post();
$get = Yii::$app->request->get();
if(isset($get['id'])){
$model = $model->findModel($get['id']);
$modelSer = ServiceTime::findByMaster($get['id']);
$timeInterval = $timeInterval->findByMaster($get['id']);
}
if ($model->load($post) and !isset($model->id)) {
if ($user = $model->signup('personal')) {
$auth = Yii::$app->authManager;
$role = $auth->getRole('personal');
$auth->assign($role, $user->id);
if(isset($post['ServiceTime'])){
$modelSer = [new ServiceTime()];
for($i = 1; $i < count($post['ServiceTime']); $i++) {
$modelSer[] = new ServiceTime();
}
if (ServiceTime::loadMultiple($modelSer, Yii::$app->request->post())) {
foreach ($modelSer as $ser) {
$ser->status = isset($ser->status)?"active":"passive";
$ser->master_id = $user->id;
$ser->save(true);
}
}
}
if(isset($post['TimesInterval'])){
$timeInterval = [new TimesInterval()];
for($i = 1; $i < count($post['TimesInterval']); $i++) {
$timeInterval[] = new TimesInterval();
}
if (TimesInterval::loadMultiple($timeInterval, Yii::$app->request->post())) {
foreach ($timeInterval as $item) {
$item->master_id = $user->id;
$item->save(true);
}
}
}
}
}elseif (isset($model->id)){
if($model->load($post)){
if($model->update()){
Yii::$app->session->setFlash('success', 'Пользователь успешно обновлен! :)');
}
}
$modelSer = ServiceTime::findByMaster($model->id);
if (ServiceTime::loadMultiple($modelSer, Yii::$app->request->post())) {
foreach ($modelSer as $ser) {
$ser->status = isset($ser->status)?"active":"passive";
$ser->save(true);
}
}
}
return $this->render('create',['model'=>$model,'modelSer'=>$modelSer,'service'=>$service,'timeInterval'=>$timeInterval]);
}
Код JS:
$("#add_time").click(function () {
$inp = $('#timesinterval-time-main').clone();
let name = $inp.attr('name','TimesInterval[0][time]').attr('readonly',true);
let id = $inp.removeAttr('id');
let div = $('<div class="col-sm-4 mb-2" data-delete-time-c><div class="input-group input-group-joined"></div></div>').children('div')
.append($inp)
.append('<div class="input-group-append"><span class="d-flex align-items-center px-3"><button class="btn btn-red" type="button" data-delete-time><i class="fad fa-calendar-times"></i></button></span></div>').end();
$("#add_time_container").append(div);
$('#timesinterval-time-main').val('').focus();
});
$(document).on('click','[data-delete-time]',function () {
$(this).closest('[data-delete-time-c]').remove();
})
$('form[data-validate]').submit(function () {
let valid = $(this).attr('data-validate');
$('input[data-inp-validate-'+valid+']').each(function (index,elem) {
let name = $(this).attr('name').split(/\d+/);
$(this).attr('name',name[0]+index+name[1]);
})
console.log("AAAAAAAAAAAA");
})
Дабы не захламлять вопрос код трех моделей добавлять не стал, если будет нужно - добавлю в последствии.
Также кусок кода по обновлению "Рабочих часов" в контроллере на данный момент не дописан, но не думаю что yii2 настолько умный, что не хочет отправлять форму без этого куска...
Заранее благодарю за ответ! Надеюсь, ошибка не в моей глупости.