я использую DynamicFormWidget
для нескольких полей ввода, таких как: first_name
, last_name
, email
& mobile_no
, И я не хочу, чтобы пользователь печатал существующий email
, Средства, email
должен быть уникальным. Это работает, когда я не использую DynamicFormWidget
, На самом деле, я не знаю, как проверить уникальную электронную почту в нескольких формах ввода, используя Yii2.
addmembers.php (Посмотреть)
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
use wbraganca\dynamicform\DynamicFormWidget;
?>
<?php DynamicFormWidget::begin([
'widgetContainer' => 'dynamicform_wrapper',
'widgetBody' => '.container-items',
'widgetItem' => '.house-item',
'limit' => 10,
'min' => 1,
'insertButton' => '.add-house',
'deleteButton' => '.remove-house',
'model' => $modelsTeamMembers[0],
'formId' => 'dynamic-form',
'formFields' => ['description',],
]); ?>
<table class="table table-bordered table-striped">
<thead>
<tr>
<th>First Name</th>
<th>Last Name</th>
<th>Email</th>
<th>Mobile Number</th>
</tr>
</thead>
<tbody class="container-items">
<?php foreach ($modelsTeamMembers as $indexMember => $modelTeamMembers): ?>
<tr class="house-item">
<td class="vcenter">
<?php
if (! $modelTeamMembers->isNewRecord) {
echo Html::activeHiddenInput($modelTeamMembers, "[{$indexMember}]id");
}
?>
<?= $form->field($modelTeamMembers, "[{$indexMember}]first_name")->label(false) ?>
</td>
<td>
<?= $form->field($modelTeamMembers, "[{$indexMember}]last_name")->label(false) ?>
</td>
<td>
<?= $form->field($modelTeamMembers, "[{$indexMember}]email",['enableAjaxValidation' => true])->label(false) ?>
</td>
<td>
<?= $form->field($modelTeamMembers, "[{$indexMember}]mobile_no",['inputOptions' => ['class' => 'form-control', 'maxlength'=>"10"]])->label(false) ?>
</td>
</tr>
<?php endforeach; ?>
UsersController.php (Контроллер)
<?php
namespace app\modules\users\controllers;
use Yii;
use yii\web\NotFoundHttpException;
use yii\filters\VerbFilter;
use yii\swiftmailer\Mailer;
use yii\filters\AccessControl;
use yii\web\Response;
use yii\widgets\ActiveForm;
class UsersController extends CommonController
{
public function actionAddmembers() {
if(Yii::$app->request->isAjax && $modelUser->load(Yii::$app->request->post())) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validate($modelUser);
}
elseif ($modelUser->load(Yii::$app->request->post())) {
.
.
}
}
}
Users.php (Модель)
namespace app\modules\users\models;
use Yii;
use app\models\MyActiveRecord;
use yii\web\IdentityInterface;
class Users extends MyActiveRecord implements IdentityInterface
{
public $rememberMe;
public $confirm_password;
public $verify_code;
public $_user = false;
public static function tableName() {
return 'users';
}
public function rules() {
return [
.
.
//Email ID
'emailTrim' => ['email', 'filter', 'filter' => 'trim'],
'emailRequired' => ['email', 'required','message'=>'* required field'],
'emailPattern' => ['email', 'email'],
'emailUnique' => ['email', 'unique','message'=>'Email already exists!'],
];
}
.
.
.
}
Я также попробовал:
UsersController.php (Контроллер)
public function actionAddmembers() {
$modelUser = new Users();
$modelCompanyUser = new CompanyUsers();
$modelCompany = new Company();
$modelsTeamMembers = [new Users];
$modelUserDetails = MyActiveRecord::createMultiple(Users::classname());
MyActiveRecord::loadMultiple($modelUserDetails, Yii::$app->request->post());
if (Yii::$app->request->isAjax) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ArrayHelper::merge(ActiveForm::validateMultiple($modelUserDetails));
} elseif($modelUser->load(Yii::$app->request->post())){
.
.
}
}
Я следую yii2-dynamicform
Любая помощь / подсказка / предложение будут заметны.
Да. Я понял. Если у кого-то возникла такая же проблема, используйте этот код. Пожалуйста измените $modelUserDetails
переменная, где это необходимо.
я использую DynamicFormWidget
,
И я хотел проверить электронную почту существует на email
поле. Так,
addmembers.php (Посмотреть)
использование use yii\widgets\ActiveForm;
в верхней части страницы. И положи 'enableAjaxValidation' => true
в поле, где вы хотите, чтобы пользователь ограничил вводить повторяющиеся значения.
use yii\widgets\ActiveForm; // This is mandatory.
.
.
<?= $form->field($modelTeamMembers, "[{$indexMember}]email",['enableAjaxValidation' => true]);?>
.
.
UsersController.php (Контроллер)
<?
// These two lines are mandatory.
use yii\web\Response;
use yii\widgets\ActiveForm;
..
public function actionAddMembers() {
.
.
$modelUserDetails = MyActiveRecord::createMultiple(Users::classname());
MyActiveRecord::loadMultiple($modelUserDetails, Yii::$app->request->post());
// ajax validation
if (Yii::$app->request->isAjax) {
Yii::$app->response->format = Response::FORMAT_JSON;
return ActiveForm::validateMultiple($modelUserDetails);
} elseif ($modelUser->load(Yii::$app->request->post())) {
// Business Logic
}
}
Users.php (Модель)
class Users extends MyActiveRecord implements IdentityInterface
{
.
.
.
public function rules() {
return [
.
.
['email', 'unique','message'=>'Email already exists!'],
];
}
}
Это обязательно поможет.
Других решений пока нет …