validaciones personalizadas formularios example php yii model yii-extensions yii-components

php - formularios - validaciones personalizadas yii2



¿Cómo validar el correo electrónico y el correo electrónico que ya existen o no, en Yii Framework? (6)

Puede crear su método de validación personalizado para cumplir con sus requisitos.

Crea una función en la clase de modelo:

public function uniqueEmail($attribute, $params) { // Set $emailExist variable true or false by using your custom query on checking in database table if email exist or not. // You can user $this->{$attribute} to get attribute value. $emailExist = true; if($emailExist) $this->addError(''email'',''Email already exists''); }

Usuario este método de validación en reglas:

array(''email'', ''uniqueEmail'',''message''=>''Email already exists!''),

Cómo validar el correo electrónico utilizando el código de función de las reglas de validación del modelo Yii. También existe o no la manera de verificar el correo electrónico utilizando la función de reglas de validación del modelo en Yii.


Puede establecer las validaciones de su modelo como se muestra a continuación

public function rules() { // NOTE: you should only define rules for those attributes that // will receive user inputs. return array( //First parameter is your field name of table which has email value array(''email'', ''email'',''message''=>"The email isn''t correct"), array(''email'', ''unique'',''message''=>''Email already exists!''), ); }

Enlace de referencia Yii para obtener más detalles: http://www.yiiframework.com/wiki/56/


Puede encontrar fácilmente si el correo electrónico ya está presente en su db o no definiendo la regla.

Aquí está la regla.

array(''xxx'', ''unique'', ''className'' => ''SomeClass'', ''attributeName'' => ''SomeAttribute''),

Ejemplo.

public function rules() { return array( ... array(''email'', ''unique'', ''className'' => ''User'', ''attributeName'' => ''email'', ''message''=>''This Email is already in use''), ... ); }

Aquí quiero poner la validación en el correo electrónico, que es único, mi nombre de clase de modelo es Usuario, attributeName es el nombre de campo de la tabla, es decir, correo electrónico y si el correo electrónico ya está presente en la tabla, muestra un mensaje.

Si genera un error, puede cambiar su tabla y hacer único el campo de correo electrónico.

ALTER TABLE user ADD UNIQUE (correo electrónico)

Entonces revisa.

otras validaciones de correo electrónico se encuentran a continuación. que creo que es un conjunto completo de validación de correo electrónico.

public function rules() { return array( ... array(''email'', ''required''), array(''email'', ''length'', ''max''=>200), array(''email'', ''email'', ''message''=>''Email is not valid''), array(''email'', ''unique'', ''className'' => ''User'', ''attributeName'' => ''email'', ''message''=>''This Email is already in use''), ... ); }

Eso es. Gracias


Validación personalizada, código corto y dulce. intenta esto, está funcionando bien -

public function rules() { return array( array(''email, first_name, last_name, password, repeat_password'', ''required''), array(''email'', ''email'',''message''=>"The email isn''t correct"), array(''email'', ''uniqueEmail''), ); }

escribe esta función personalizada en el mismo modelo -

public function uniqueEmail($attribute, $params) { if($user = User::model()->exists(''email=:email'',array(''email''=>$this->email))) $this->addError($attribute, ''Email already exists!''); }


Para Yii2 utilicé lo siguiente en un modelo llamado Register que utilizará la clase de usuario.

public function rules() { return [ [''Email'', ''filter'', ''filter'' => ''trim''], [''Email'', ''required''], [''Email'', ''email''], [''Email'', ''unique'', ''targetClass'' => ''/common/models/User'', ''message'' => ''This email address has already been taken.''], ]; }

Necesita utilizar targetClass y poner la Namepsace para el usuario de clase


Siga las pocas modificaciones de la siguiente manera: Siga su archivo según el módulo que haya utilizado.

Ir a modelos -> abrir -> Users.php -> Modificar línea como se menciona a continuación.

public function rules() { return [ [[''User_Email''], ''unique''], [[''User_Mobile''],''unique''], ]; }

Ahora vaya a views-> users -> Open _form.php-> escriba el código como se menciona a continuación

<div class="users-form"> <?php $form = ActiveForm::begin([ ''id'' => $model->formName(), ''enableAjaxValidation'' => true, ]); ?> <?= $form->field($model, ''User_Email'')->textInput([''maxlength'' => true])?> <?= $form->field($model, ''User_Mobile'')->textInput([''maxlength'' => true])?> <div class="form-group"> <?= Html::submitButton($model->isNewRecord ? ''Create'' : ''Update'', [''class'' => $model->isNewRecord ? ''btn btn-success'' : ''btn btn-primary'']) ?> </div> <?php ActiveForm::end(); ?> </div>

Ahora vaya a Controlador-> abra UsersController.php -> wirte el código como se menciona a continuación

public function actionCreate() { if(Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())){ Yii :: $app->response->format = ''json''; return /yii/bootstrap/ActiveForm::validate($model); } }

Gracias