Yii2 Telefon Alanını Formatlama


        Geçenlerde kullanıcı bilgileri için bir bölüm hazırlarken telefon alanına girilen numaraya daha sonra mesaj gönderebilmek için uygun formatta veri almam gerekiyordu. Bunun için jQuery ile maskeleme işlemine başvurdum. Daha önceki bir yazımda uygulamaya nasıl JavaScript ve jQuery ekleneceğinden bahsetmiştim. Bu yazımda da bunun bir örneği olarak bu telefon alanının nasıl oluşturulacağını anlatacağım.
  • İlk olarak kullanacağımız jQuery Masked kütüphanesini uygulamamıza eklememiz gerekiyor. Bu kütüphaneye buradan ulaşabilirsiniz. Kütüphaneyi uygulama_adi/assets/ dizinin içerisine kopyalıyoruz. 
  •  Daha sonra uygulama_adi/assets/AppAssets.php dosyasını açıyoruz ve 
    public $js = [

    ];
          kısmının içerisine kütüphanenin ismini ekliyoruz;

    '/uygulama_adi/assets/jquery.maskedinput.js',

  • Telefon alanını hangi view dosyasına eklemek istiyorsanız (create, update, ...) bu dosyayı açıyoruz ve aşağıdaki kodları ekliyoruz. Bu kodlar dosyayı aktif etmeyi ve JavaScript veye jQuery kodlarımızı çalıştırmaya yarıyor.
    <?= $form->field($model, 'cell_phone')->textInput(['maxlength' => 13]) ?>
    // Telefon alanını oluşturduk.

    <?php
        $this->registerJsFile('jquery.maskedinput.js');
        // Kütüphaneyi dahil ettik.

        $this->registerJs('$("#users-cell_phone").mask("+90-999-999-9999");');
        // Bu kısımdaki mask ile maskenin nasıl olacağını ayarlayabilirsiniz.
    ?>
  • Bu kodları ekledikten sonra son bir işlem daha yapmamız gerekiyor o da aldığımız bu veriyi veritabanına nasıl kaydetmemizi istediğimizle ilgili. Ben '90xxxxxxxxxx' formatında kaydetmek istediğim için Regular Expression kısmını ona göre ayarladım. Siz de istediğiniz format için bir düzenli ifade yazabilirsiniz.
  • Telefon alanı hangi view dosyasında bulunuyorsa o view dosyasının controller'ının ilgili action'ına (metod) aşağıdaki kodları ekliyoruz.
    $phone = "";
    $tentativ = $model->cell_phone;
    $phone = preg_replace('/[^\d]/', '', $tentativ);
    $model->cell_phone = $phone;

    Her şey yolunda gitmişse maskeleme işlemi gerçekleşecek ve gelen verinin formatlanmış halini veritabanına kaydetmiş olacağız. İyi çalışmalar.