Я использую 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; ?>
-<?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())) { . . } } }
Пользователи.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 } }
Пользователи.php (модель)
class Users extends MyActiveRecord implements IdentityInterface { . . . public function rules() { return [ . . ['email', 'unique','message'=>'Email already exists!'], ]; } }
Это, безусловно, поможет.