Dropdown value with array data wont work in if condition (user role) [solved]

My FormRegister.php

<?php

namespace app\models;
use Yii;
use yii\base\Model;
use app\models\Users;


class FormRegister extends model{
 
    public $role;
    public $nombre;
    public $rut;
    public $fono;
    public $direccion;
    public $email;
    public $id_curso;
    public $id_alumno;
    public $apoderado_sup;
    public $fono_apoderado_sup;
    public $email_apoderado_sup;
    public $username;
    public $password;
    public $password_repeat;
    public $id_apoderado;
    public $id_profesor;
    
    
    
    public function rules()
    {
        return [
            [['role', 'username', 'email', 'password', 'password_repeat'], 'required', 'message' => 'Campo requerido'],
            [['nombre', 'rut', 'fono', 'direccion'], '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'],
            [['id_curso', 'id_alumno', 'nombre'], 'required', 'message' => 'Campo requerido'],
//            [['apoderado_sup', 'fono_apoderado_sup', 'email_apoderado_sup'], 'required', 'message' => 'Campo requerido'],
            ['username', 'match', 'pattern' => "/^.{3,50}$/", 'message' => 'Mínimo 3 y máximo 50 caracteres'],
            ['username', 'match', 'pattern' => "/^[0-9a-z]+$/i", 'message' => 'Sólo se aceptan letras y números'],
            ['username', 'username_existe'],
            ['password', 'match', 'pattern' => "/^.{6,16}$/", 'message' => 'Mínimo 6 y máximo 16 caracteres'],
            ['password_repeat', 'compare', 'compareAttribute' => 'password', 'message' => 'Los passwords no coinciden'],
        ];
    }
    
    public function email_existe($attribute, $params)
    {
  
        //Buscar el email en la tabla
        $table = Users::find()->where("email=:email", [":email" => $this->email]);
  
        //Si el email existe mostrar el error
        if ($table->count() == 1)
        {
            $this->addError($attribute, "El email seleccionado existe");
        }
    }
 
    public function username_existe($attribute, $params)
    {
        //Buscar el username en la tabla
        $table = Users::find()->where("username=:username", [":username" => $this->username]);
  
        //Si el username existe mostrar el error
        if ($table->count() == 1)
        {
            $this->addError($attribute, "El usuario seleccionado existe");
        }
    }
    
    public function attributeLabels()
    {
        return[
            'role' => 'Tipo de Usuario',
            'nombre' => 'Nombre',
            'rut' => 'Rut',
            'fono' => 'Fono',
            'direccion' => 'Dirección',
            'email' => 'Email',
            'id_curso' => 'Curso',
            'id_alumno' => 'Alumno',
            'apoderado_sup' => 'Apoderado Suplente',
            'fono_apoderado_sup' => 'Fono Apoderado Suplente',
            'email_apoderado_sup' => 'Email Apoderado Suplente',
            'username' => 'Nombre de Usuario',
            'password' => 'Contraseña',
            'password_repeat' => 'Repetir contraseña',
        ];
    }
 
}

Probably you have to add in validator for role.

    public function rules()
    {
        return [
            [['role', 'username', 'email', 'password', 'password_repeat'], 'required', 'message' => 'Campo requerido'],
            ['role', 'in', 'range' => [1,2]],
            ...

https://www.yiiframework.com/doc/guide/2.0/en/tutorial-core-validators#in

Thank you for your time my friend, but it didn’t work.

@softark @machour I also tried this with no success

SiteController.php

if (in_array('1', $model->role)){
$apoderado = new Apoderado;
...
$apoderado->save();
} elseif (in_array('2', $model->role)) {
$profesor = new Profesor;
...
$profesor->save();
}

register.php

<div class="form-group">
    <?= $form->field($model, 'role[]')->dropDownList(
            ['1' => 'Apoderado', '2' => 'Profesor'], 
            ['prompt' => 'Seleccione tipo de usuario']); ?>
</div>

Well, I think @machour and I have done all that could be done. There’s not much left to do except for a very simple kind of debugging which must be done on your part.

  1. There’s no reason to use role[]. You should use role.
  2. Check what is in $model->role before you branch processing.
// check what's in $model->role
var_dump($model->role);
if ($model->role == 1 ) {
    // save apoderado
} elseif ($model->role == 2) {
   // save profesor
}

Thank you for your time and effort my friends @machour and @softark. I published a topic in stackoverflow https://stackoverflow.com/questions/54207203/cant-compare-dropdown-string-value-to-an-int-user-role-in-yii2 and user Jørgen told me to do this:

die(var_dump($apoderado->errors))

I found a terrible mistake, $apoderado->id and $profesor->id had null values so the code was never going to create a record in table apoderado or profesor.

I did $apoderado->save(false) and $profesor->save(false) because I dont have id’s for apoderado or profesor in FormRegister, and now it works.

if ($model->role == '1'){
                    $apoderado = new Apoderado;
                    $apoderado->nombre = $model->nombre;
                    $apoderado->rut = $model->rut;
                    $apoderado->fono = $model->fono;
                    $apoderado->direccion = $model->direccion;
                    $apoderado->email = $model->email;
                    $apoderado->id_alumno = $model->id_alumno;
                    $apoderado->apoderado_sup = $model->apoderado_sup;
                    $apoderado->fono_apoderado_sup = $model->fono_apoderado_sup;
                    $apoderado->email_apoderado_sup = $model->email_apoderado_sup;
                    $apoderado->save(false);
                    $table->id_apoderado = $apoderado->id;
//                    die(var_dump($apoderado->errors));
                } else {
                    $profesor = new Profesor;
                    $profesor->id = $model->id_profesor;
                    $profesor->nombre = $model->nombre;
                    $profesor->rut = $model->rut;
                    $profesor->fono = $model->fono;
                    $profesor->direccion = $model->direccion;
                    $profesor->email = $model->email;
                    $profesor->save(false);
                    $table->id_profesor = $profesor->id;
                }