сейчас у меня проблема с формой проверки только при использовании виджета select2 используя список через ajax. Я ценю любую поддержку
У меня есть эта модель
И я установил select2 для выбора из поля предложения. Я не знаю, почему форма не проверяется, когда поле пусто. ПОЖАЛУЙСТА, ПОМОГИТЕ !!
Код модели table1
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "table1".
*
* @property int $id_t1
* @property string $descrip
*
* @property Table2[] $table2s
*/
class Table1 extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'table1';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['descrip'], 'required'],
[['descrip'], 'string', 'max' => 45],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'id_t1' => Yii::t('app', 'Id T1'),
'descrip' => Yii::t('app', 'Descrip'),
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getTable2s()
{
return $this->hasMany(Table2::className(), ['id_t1' => 'id_t1']);
}
}
Код модели table2
<?php
namespace app\models;
use Yii;
/**
* This is the model class for table "table2".
*
* @property string $desct2
* @property string $id_t2
* @property int $id_t1
*
* @property Table1 $t1
*/
class Table2 extends \yii\db\ActiveRecord
{
/**
* {@inheritdoc}
*/
public static function tableName()
{
return 'table2';
}
/**
* {@inheritdoc}
*/
public function rules()
{
return [
[['desct2', 'id_t2', 'id_t1'], 'required'],
[['id_t1'], 'integer'],
[['desct2', 'id_t2'], 'string', 'max' => 45],
[['id_t2'], 'unique'],
[['id_t1'], 'exist', 'skipOnError' => true, 'targetClass' => Table1::className(), 'targetAttribute' => ['id_t1' => 'id_t1']],
];
}
/**
* {@inheritdoc}
*/
public function attributeLabels()
{
return [
'desct2' => Yii::t('app', 'Desct2'),
'id_t2' => Yii::t('app', 'Id T2'),
'id_t1' => Yii::t('app', 'Id T1'),
];
}
/**
* @return \yii\db\ActiveQuery
*/
public function getT1()
{
return $this->hasOne(Table1::className(), ['id_t1' => 'id_t1']);
}
}
список функций Ajax в Table1Controller
..
...
...
public function actionFieldsList($q = null, $id = null) {
Yii::$app->response->format = Response::FORMAT_JSON;
$out = ['results' => ['id' => '', 'text' => '']];
if (!is_null($q)) {
$query = new Query;
$query->select(['id_t1 as id' , 'descrip AS text'])
->from('table1')
->where(['like', 'descrip', $q])
->limit(20);
$command = $query->createCommand();
$data = $command->queryAll();
$out['results'] = array_values($data);
}
elseif ($id > 0) {
$out['results'] = ['id' => $id, 'text' => Table1::find($id)->descrip];
}
return $out;
}
просмотр формы с select2
<?php
use app\models\Table1;
use kartik\select2\Select2;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\helpers\Url;
use yii\web\JsExpression;
use yii\widgets\ActiveForm;
/* @var $this yii\web\View */
/* @var $model app\models\Table2 */
/* @var $form yii\widgets\ActiveForm */
?>
<div class="table2-form">
<?php $form = ActiveForm::begin(); ?>
<?=
$form->field($model, 'id_t1')->widget(Select2::className(), [
'initValueText' => empty($model->id_t1) ? '' : \app\models\Table1::findOne($model->id_t1)->descrip, // set the initial display text
'language'=>'es',
'options' => ['placeholder' => 'Select '],
'pluginOptions' => [
'ajax' => [
'url' => Url::to(['table1/fields-list']),
'dataType' => 'json',
'cache' => true,
'data' => new JsExpression('function(params) { return {q:params.term}; }')
],
'escapeMarkup' => new JsExpression('function (markup) { return markup; }'),
'templateResult' => new JsExpression('function(data) { return data.text; }'),
'templateSelection' => new JsExpression('function (data) { return data.text; }'),
],
]);
?>
<?= $form->field($model, 'desct2')->textInput(['maxlength' => true]) ?>
<?= $form->field($model, 'id_t2')->textInput(['maxlength' => true]) ?>
<div class="form-group">
<?= Html::submitButton('Save', ['class' => 'btn btn-success']) ?>
</div>
<?php ActiveForm::end(); ?>
</div>