Есть форма, где динамический формируется поля. Проблема в том что не работает валидация полей на клиентской части. Если заполнить поле и нажать на сабмит, то срабатывает валидация и выдается сообщение о том что поле обязательна для заполнения и соответственно нельзя ничего сохранить. Проблема началась после того как пытался реализовать проверку на уникальность с помощью ajax, примерно как тут http://stackoverflow.com/questions/34305964/yii2-activeform-unique-validation-not-show-error-message но ничего не вышло и решил вернуть все как было. Кстати если по relations нет записей и срабатывает вот это условие
'modelsDiapazons' => (empty($modelsAddress)) ? [new Vdns] : $modelsAddress,
то тогда все ок, валидация работает как надо
Сама Форма
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use yii\helpers\ArrayHelper;
use wbraganca\dynamicform\DynamicFormWidget;
$js = '
jQuery(".dynamicform_wrapper").on("afterInsert", function(e, item) {
jQuery(".dynamicform_wrapper .panel-title-address").each(function(index) {
jQuery(this).html("Address: " + (index + 1))
});
});
jQuery(".dynamicform_wrapper").on("afterDelete", function(e) {
jQuery(".dynamicform_wrapper .panel-title-address").each(function(index) {
jQuery(this).html("Address: " + (index + 1))
});
});
';
$this->registerJs($js);
$KtService = ArrayHelper::map(common\models\KtService::find()->asArray()->all(), 'id', 'name');
?>
<div class="padding-top-10">
<?php $form = ActiveForm::begin([
'id' => 'dynamic-form'
]); ?>
<?php DynamicFormWidget::begin([
'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_]
'widgetBody' => '.container-items', // required: css class selector
'widgetItem' => '.item', // required: css class
'limit' => 4, // the maximum times, an element can be cloned (default 999)
'min' => 0, // 0 or 1 (default 1)
'insertButton' => '.add-item', // css class
'deleteButton' => '.remove-item', // css class
'model' => $modelsDiapazons[0],
'formId' => 'dynamic-form',
'formFields' => [
'full_name',
'address_line1',
'address_line2',
'city',
'state',
'postal_code',
],
]); ?>
<div class="panel panel-default">
<div class="panel-heading">
Диапазоны
<button type="button" class="pull-right add-item btn btn-success btn-xs"><i class="fa fa-plus"></i> Добавить</button>
<div class="clearfix"></div>
</div>
<div class="panel-body container-items"><!-- widgetContainer -->
<?php foreach ($modelsDiapazons as $index => $modelDiapazons): ?>
<div class="item panel panel-default"><!-- widgetBody -->
<div class="panel-heading">
<button type="button" class="pull-right remove-item btn btn-danger btn-xs"><i class="fa fa-minus"></i></button>
<div class="clearfix"></div>
</div>
<div class="panel-body">
<?php
// necessary for update action.
if (!$modelDiapazons->isNewRecord) {
echo Html::activeHiddenInput($modelDiapazons, "[{$index}]vdn");
}
?>
<div class="col-md-6 ">
<?= $form->field($modelDiapazons, "[{$index}]service")->dropDownList($KtService) ?>
</div>
<div class="col-md-6 ">
<?= $form->field($modelDiapazons, "[{$index}]vdn")->textInput() ?>
</div>
</div>
</div>
<?php endforeach; ?>
</div>
</div>
<?php DynamicFormWidget::end(); ?>
<?= Html::submitButton($model->isNewRecord ? 'Создать' : 'Изменить', ['class' => $model->isNewRecord ? 'btn btn-success' : 'btn btn-primary']) ?>
<?= Html::a('Отмена', ['index'], ['class' => 'btn btn-primary']) ?>
<?php ActiveForm::end(); ?>
</div>
model
namespace common\models;
use Yii;
use yii\db\ActiveRecord;
class Vdns extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'app.vdns';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
[['vdn'], 'required', 'message'=>'* не может быть пустым.'],
[['vdn'], 'integer'],
[['vdn', 'service'], 'safe'],
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'vdn' => 'Виртуальный номер',
'service' => 'Служба',
'region_id' => 'Регион',
];
}
}
Модель с relations
namespace common\models;
use Yii;
use yii\db\ActiveRecord;
use common\models\Vdns;
class Region extends \yii\db\ActiveRecord
{
/**
* @inheritdoc
*/
public static function tableName()
{
return 'dictionaries.region';
}
/**
* @inheritdoc
*/
public function rules()
{
return [
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'region_id' => 'ID',
'region_name' => 'Наименование региона',
'town_code' => 'Town code',
'town_name' => 'Наименование региона',
'sys_creation_dae' => 'Дата создания',
'sys_update_date' => 'Дата обновления',
'office_id' => 'Филиал',
];
}
public function getVdns()
{
return $this->hasMany(Vdns::className(), ['region_id' => 'region_id']);
}
}
Контроллер
public function actionUpdate($id)
{
$modelCustomer = $this->findModel($id);
$modelsAddress = $modelCustomer->vdns;
if (Yii::$app->request->post()) {
$oldIDs = ArrayHelper::map($modelsAddress, 'vdn', 'vdn');
$modelsAddress = Model::createMultipleVdns(Vdns::classname(), $modelsAddress);
Model::loadMultiple($modelsAddress, Yii::$app->request->post());
$deletedIDs = array_diff($oldIDs, array_filter(ArrayHelper::map($modelsAddress, 'vdn', 'vdn')));
// validate all models
$valid = $modelCustomer->validate();
$valid = Model::validateMultiple($modelsAddress) && $valid;
if ($valid) {
$transaction = \Yii::$app->db->beginTransaction();
try {
if ($flag = $modelCustomer->save(false)) {
if (!empty($deletedIDs)) {
Vdns::deleteAll(['vdn' => $deletedIDs]);
}
foreach ($modelsAddress as $modelAddress) {
$modelAddress->region_id = $id;
if (! ($flag = $modelAddress->save(false))) {
$transaction->rollBack();
break;
}
}
}
if ($flag) {
$transaction->commit();
return $this->redirect(['view', 'id' => $id]);
}
} catch (Exception $e) {
$transaction->rollBack();
}
}
}
return $this->render('update', [
'model' => $modelCustomer,
'modelsDiapazons' => (empty($modelsAddress)) ? [new Vdns] : $modelsAddress,
]);
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Как вывести значение $username & $photos из функции в $dataToBePassed (сейчас выводит null):
Подскажите, допустим с помощью парсера получаю url картинки на сайте, с которого нужно скопировать картинкиИ нужно создать thumbnail для определённой...
На локальном хостинге использую denwer, пытаюсь создать папку с помощью функции mkdir(), ошибку не выдаёт но и ни чего не создаётМожет в php
Всем доброго времени сутокподскажите кто может, как можно подсчитать количество обращений к php файлу через ajax ? Имеются 2 страницы - 01