Liman MYS’de Vue.js ve typescript Template i Kullanarak Eklenti Nasıl Yazılır

liman-mys’de-vue.js-ve-typescript-template-i-kullanarak-eklenti-nasil-yazilir

Bu eklentide kripto paralarla ilgili data dönen bir public API’den aldığımız datayı bir table üzerinde göstereceğiz.

Template de kullanacağımız kısımlar

*PHP ile backend kısmını yazabilmek için App/controllers klasörü

*TypeScript ile request atarken kullanacağımız PHP ile bağlanmak için kullanacağımız accountmanager/routes.php dosyası

*Frontend kısmında sayfalarımızı yazacağımız accountmanager/frontend/src/views/pages dosyası

*Yazdığımız dosyalar arasında gezebilmeyi sağlamak için accountmanager/frontend/src/views/layouts/Navigation.vue dosyası

*Vue sayfaları arasında gezinebilmemizi sağlayan accountmanager/frontend/src/router/index.ts dosyası

API linki:

https://api.coinstats.app/public/v1/coins?skip=0&limit=5&currency=EUR

Backend için request atacak fonksiyonun yazımı

Öncelikle API’ımıza request atabilmek için bir fonksiyon oluşturmamız gerekiyor. Bunun için ister App/Controllers altındaki bir controller ı kullanabilir isterseniz ise kendi controller’ınızı oluşturabilirsiniz.

Ben MyController.php adında bir controller oluşturup içine fonksiyonu yazdım.

public function cryptorequest($currency="EUR")
    {
        $client = new GuzzleHttpClient(['verify' => 
                                          false]);

$res =$client>get("https://api.coinstats.app/public/v1/coins? 
   skip=0&limit=5¤cy=$currency");
return ($res->getBody()->getContents());

    }

Fonksiyonun routes a eklenmesi

Bu adımda vue.js ile erişebilmek için fonksiyonumuzu routes a ekliyoruz.
routes.php ye gidip şu satırı ekliyoruz:

"cryptorequest"=>"MyController@cryptorequest"

burda ilk cryptorequest fonksiyonu çağırırken kullanacağımız ismi, ikinci cryptorequest ise MyController.php nin altındaki fonksiyonumuzu gösteriyor.

Sayfalar arasında geçebilmek için sayfanın index.ts e eklenmesi

Önce sayfamızı import etmemiz gerekiyor.
index.ts in en başına

import ApiTest from "@/views/pages/ApiTest.vue"

yazdıktan sonra routes arrayinin içine sayfamızı tanımlıyoruz. Ekleyeceğimiz kısım şu şekilde:

{
      path: "/apitest",
      name: "apitest",
      component: ApiTest,
},

Yazacağımız sayfaya UI üzerinde erişebilmemiz için Navigation.vue nun düzenlenmesi

Navigation.vue nun altında menuOptions adlı bir değişken var. Bu eklenti açıldığında üst kısımda gözüken sekmeleri temsil ediyor.
Sayfamızı orda görüntüleyebilmek için bu değişkenin içine aşağıdaki gibi sayfalarımızın bilgilerini girmeliyiz.

{
 label: () =>
   h(RouterLink, { to: "/apitest", exact: true }, 
                    t("navigation.apitest")),
                    key: "apitest",
                    show: can("approvals"),
   },

apitest index.ts içinde belirlediğim sayfamın değişken adı.

Sayfanın tasarlanması

Öncelikle accountmanager/frontend/src/views/pages in altına ApiTest.vue dosyası oluşturarak başlıyoruz. Biz TypeScript kullanacağımız için default templateimiz şöyle olacak:



Temel Vue.js bilgisi için şu tutorialı takip edebilirsiniz:
https://vuejs.org/tutorial/#step-1

Import yapımı

    import http from "@/utils/http-common"
    import {ref} from "vue"

Inject yapabilmek için ref object tanımlanması

const components=ref()

burada components in değerine ulaşmak için .value yazmamız gerekiyor.

İlki PHP ye request atmamızı sağlayan fonksiyon
İkincisi ise template içine inject yapmamızı sağlayan obje

PHP ye request atmak

Request için şu fonksiyonu kullanıyoruz:

   http.php("cryptorequest")
    .then((res) => {
      if (res.status == 200) {
      //request başarılı ise
      }
      else{
       //request fail ise
      }
    })

Burada res request imizden dönen response oluyor ve status ve data olarak iki attribute u bulunuyor.

 if (res.status == 200) {
      components.value=res.data["coins"]
      }

şeklinde components değişkenimize respons datamızı yazıyoruz.

Template hazırlanması

Templatemiz HTML formatında kullanılıyor:

  v-for="component in components" 
                     :key="component['id']">
            
ID Icon Name Symbol Rank
{{ component["id"] }} :src="component['icon']"> {{ component["name"] }} {{ component["symbol"] }} {{ component["rank"] }}

*Dataları doldurmak için bir table açıp başlıklar için manuel olarak bir tr oluşturuyoruz.

*Ardından v-for kullanarak (foreach gibi bir loop) her bir component için table bastırtıyoruz. Her komponentin bir key i olması gerekiyor.

  • {{}} ise placeholderımız oluyor. HTML elementlerinin içine istediğimiz değişkenleri yerleştirebiliriyoruz bu şekilde.

Son olarak aşağıdaki gibi style ekleyerek bitiriyoruz.


Total
0
Shares
Leave a Reply

Your email address will not be published. Required fields are marked *

Previous Post
security-best-practices-for-github-actions-secrets

Security Best Practices For GitHub Actions Secrets

Next Post
the-mozcon-2023-video-bundle-is-here-(plus,-our-2022-videos-are-free!)

The MozCon 2023 Video Bundle Is Here (Plus, Our 2022 Videos are FREE!)

Related Posts