Validación Ajax en Model no funciona

Buen día, espero se encuentren bien, ojalá alguien me pueda ayudar a explicarme que estoy haciendo mal en Yii2, estoy siguiendo un tutorial de youtube para migrarme a Yii2, y ando intentando hacer validación en Ajax, pero no me esta funcionando el método (email_existe) que hice y agregue dentro de rules, inclusive puse un var_dump para ver si entra a la función y jamás entra, el código de mi model es el siguiente:

<?php 
namespace app\models;
use Yii;
use yii\base\Model;

class ValidarFormularioAjax extends model{
    
    public $nombre;
    public $email;
    
    public function rules() {
        
        return [
            ['nombre', 'required', 'message' => 'Campo requerido'],
            ['nombre', 'match', 'pattern' => "/^.{3,50}$/", 'message' => 'Mínimo 3 y máximo 50 caracteres'],
            ['nombre', 'match', 'pattern' => "/^[0-9a-z]+$/i", 'message' => 'Sólo se aceptan letras y números'],
            ['email', 'required', 'message' => 'Campo requerido'],
            ['email', 'match', 'pattern' => "/^.{5,80}$/", 'message' => 'Mínimo 5 y máximo 80 caracteres'],
            ['email', 'email', 'message' => 'Formato no válido'],
            ['email','email_existe'],
        ];
        
    }
        
    public function attributes() {
        
        return array("nombre"=>"Nombre:","email"=>"Email:");
        
    }
  
    public function email_existe($attribute, $params){
        var_dump("entro");die;
        $email = array("manuel@gmail.com","antonio@gmail.com");
        foreach ($email as $value){
            
            if($this->email == $value){
                $this->addError($attribute, "El email ya existe");
                return true;
            }
        }
        
    }
}
?>

Saludos, aqui te dejo un ejemplo, espero q te sirva,

<?php // unique con ajax // en el formulario <?php $form = ActiveForm::begin(['enableAjaxValidation' => true]); ?> <?php // modelo ['clientescedula', 'unique', 'targetAttribute' => ['clientescedula'], 'message' => 'Num Cedula Ya existe'], ['zonasdireccicodigo', 'unique', 'targetAttribute' => ['zonasdireccicodigo'], 'message' => 'Codigo Ya existe'], // controller use yii\web\HttpException; use yii\db\ActiveRecord; // use yii\web\HttpException; use yii\db\ActiveRecord; use yii\web\Response; use yii\widgets\ActiveForm; // Create if (Yii::$app->request->isAjax && $model->load(Yii::$app->request->post())) { Yii::$app->response->format = Response::FORMAT_JSON; return ActiveForm::validate($model); } ?>

gracias por el consejo pero creo que es otra cosa diferente, si te fijas en el código que agregue allí tengo una función en el Model llamada email_existe, que esa es la función que no me esta funcionando por que nunca la manada llamar, hay alguna manera de mandarla llamar? Si te fijas en esa función que te comento es donde ya le pongo la llamada al atributo y le paso el mensaje, pero lo raro es que jamás entra a esa función

agregue en el controller
image

1 Like