लारवेल लाइव कमेंटिंग सिस्टम बनाएं

अपने ऑनलाइन समुदाय या ब्लॉग में विश्वास बनाने के लिए, एक महत्वपूर्ण तत्व जो आप चाहते हैं वह है एक अच्छी तरह से डिज़ाइन किया गया लारवेल लाइव कमेंटिंग सिस्टम।

हालाँकि, पहली कोशिश में इसे ठीक करना आसान नहीं है जब तक कि आप स्वयं-होस्टेड टिप्पणी प्रणाली जैसे कि पर भरोसा नहीं करते हैं Disqus या कमेंटो, जिनमें से प्रत्येक अपने स्वयं के नुकसान के सेट के साथ आता है। वे आपके डेटा के स्वामी हैं, सीमित डिज़ाइन और अनुकूलन प्रदान करते हैं, और सबसे महत्वपूर्ण बात यह है कि वे मुफ़्त नहीं हैं।

इन सीमाओं के साथ, यदि आपका रीयल-टाइम कमेंटिंग सिस्टम बनाने का विचार – आपके डेटा को नियंत्रित करने के लाभों के साथ, आपके ब्लॉग में फिट होने के लिए लुक और फील को डिजाइन और कस्टमाइज़ करने के लाभों के साथ – आपको अपील करता है, पढ़ते रहें।

यह लेख आपको सिखाएगा कि अलग-अलग कमेंटिंग फंक्शनलिटी के साथ एक अच्छी तरह से डिज़ाइन किया गया और रीयल-टाइम कमेंटिंग सिस्टम कैसे विकसित किया जाए। निर्माण के सिद्धांतों के बाद a Vue.js और Socket.io के साथ रीयल-टाइम चैट एप्लिकेशन, हम रीयल-टाइम कमेंटिंग सिस्टम विकसित करने के लिए Laravel, Pusher और React का उपयोग करेंगे।

चलो गोता लगाएँ!

हम क्या बनाएंगे

हम एक का निर्माण करेंगे वास्तविक समय टिप्पणी प्रणाली जिसे समुदाय में विश्वास बनाने के लिए किसी भी वेबसाइट या ब्लॉग में एकीकृत किया जा सकता है।

अपने ऑनलाइन समुदाय या ब्लॉग में विश्वास बनाने के लिए, एक महत्वपूर्ण तत्व जो आप चाहते हैं वह है एक अच्छी तरह से डिज़ाइन किया गया लारवेल लाइव कमेंटिंग सिस्टम। 💬 जानें कि कैसे आरंभ करें यहांट्वीट करने के लिए क्लिक करें

बिल्डिंग ब्लॉक्स अवलोकन: लारवेल, पुशर, और Vue

इससे पहले कि हम विकास में उतरें, आइए उन तकनीकों पर चर्चा करें जिनका उपयोग हम अपने वास्तविक समय की टिप्पणी प्रणाली को विकसित करने के लिए करेंगे।

laravel

laravel एक खुला स्रोत एमवीसी-उन्मुख PHP ढांचा है। इसका उपयोग सरल से जटिल PHP वेब अनुप्रयोगों के निर्माण के लिए किया जाता है जो उनके सुरुचिपूर्ण वाक्यविन्यास के लिए जाने जाते हैं। सीखना क्या Laravel है इस टिप्पणी प्रणाली के निर्माण के लिए आवश्यक है।

ढकेलनेवाला

ढकेलनेवाला डेवलपर्स को बड़े पैमाने पर रीयल-टाइम सुविधाएं बनाने में सक्षम बनाता है। यह लेख गठबंधन करेगा लारवेल इको पुशर सर्वर पर रीयल-टाइम प्रसारण ईवेंट बनाने के लिए और सामग्री को Vue.js के साथ फ्रंटएंड पर प्रदर्शित करने के लिए।

Vue.js

Vue.js हमारी पसंद का फ्रंटएंड ढांचा है। Vue.js एक प्रगतिशील जावास्क्रिप्ट फ्रंटएंड फ्रेमवर्क है जो सीखने में आसान और फ्रंटएंड डेवलपमेंट के लिए सीधे दृष्टिकोण के लिए जाना जाता है। हम अपने रीयल-टाइम कमेंटिंग सिस्टम को विकसित करने के लिए Vue.js का उपयोग करेंगे।

टिप्पणी प्रणाली का निर्माण

यदि ऊपर उल्लिखित टिप्पणी प्रणाली आपकी पसंद की लगती है, तो चलिए इसे बनाने के लिए आगे बढ़ते हैं।

1. लारवेल, पुशर और इको को स्थापित और सेटअप करें

Laravel, Echo, और Pusher की स्थापना और स्थापना सरल है क्योंकि Laravel ने पूरी तरह से Pusher के साथ काम करने के लिए Laravel Echo को स्थापित और कॉन्फ़िगर करके सभी पृष्ठभूमि कार्य किए हैं।

सबसे पहले, हम अपने बैकएंड Laravel को स्थापित और कॉन्फ़िगर करके शुरू करेंगे पीएचपी ढांचा. आप इस आदेश के साथ लारवेल का एक नया उदाहरण प्राप्त कर सकते हैं, बशर्ते आपने इसे स्थापित किया हो लारवेल सीएलआई विश्व स्तर पर:

laravel new commenter

आपका नया लारवेल इंस्टेंस कमेंटर नामक फ़ोल्डर में स्थापित किया जाएगा। आइए अपने में फोल्डर खोलें वीएससीओडी और इसे हमारे टर्मिनल में नेविगेट करें:

cd commenter

code .

इससे पहले कि हम अपना विकास सर्वर शुरू करें, आइए कुछ आवश्यक पैकेजों को स्थापित और कॉन्फ़िगर करें जिनका उपयोग परियोजना के लिए किया जाएगा।

पुशर PHP एसडीके को स्थापित करने के लिए यह कमांड चलाएँ:

composer require pusher/pusher-php-server

Vue.js फ़्रंटएंड के लिए आवश्यक NPM संकुल को संस्थापित करने के लिए यह आदेश चलाएँ:

npm install --save laravel-echo pusher-js

इसके बाद, हम Laravel Echo और Pusher को कॉन्फ़िगर करेंगे। अपने खुले संसाधन/js/bootstrap.js निम्नलिखित लिपियों में फ़ाइल और पेस्ट करें:

window._ = require("lodash");
window.axios = require("axios");
window.moment = require("moment");
window.axios.defaults.headers.common["X-Requested-With"] = "XMLHttpRequest";
window.axios.defaults.headers.post["Content-Type"] =
    "application/x-www-form-urlencoded";
window.axios.defaults.headers.common.crossDomain = true;
window.axios.defaults.baseURL = "/api";
let token = document.head.querySelector('meta[name="csrf-token"]');
if (token) {
    window.axios.defaults.headers.common["X-CSRF-TOKEN"] = token.content;
} else {
    console.error("CSRF token not found");
}


/**
 * Echo exposes an expressive API for subscribing to channels and listening
 * for events that Laravel broadcasts. Echo and event broadcasting
 * allows your team to build robust real-time web applications quickly.
 */
import Echo from "laravel-echo";
window.Pusher = require("pusher-js");
window.Echo = new Echo({
    broadcaster: "pusher",
    key: process.env.MIX_PUSHER_APP_KEY,
    cluster: process.env.MIX_PUSHER_APP_CLUSTER,
    forceTLS: true
});

आप ऊपर की स्क्रिप्ट से देखेंगे कि हम केवल अपने डिफ़ॉल्ट कॉन्फ़िगरेशन के साथ Axios इंस्टेंस को कॉन्फ़िगर कर रहे हैं। इसके बाद, हम Laravel Echo को Pusher और इसके कॉन्फ़िगरेशन का उपयोग करने के लिए कॉन्फ़िगर करेंगे।

2. डेटाबेस सेटअप और माइग्रेशन

इसके बाद, हम टिप्पणियों को दृढ़ता के लिए संग्रहीत करने के लिए अपना डेटाबेस बनाने और सेट करने जा रहे हैं। हम SQLite का उपयोग करेंगे, हालांकि आप अपनी पसंद के किसी भी डेटाबेस क्लाइंट का उपयोग कर सकते हैं।

बनाओ डेटाबेस.एसक्लाइट डेटाबेस फ़ोल्डर के अंदर फ़ाइल करें और अपना अपडेट करें .env फ़ाइल इस प्रकार है:

DB_CONNECTION=sqlite
DB_DATABASE=/Users/all/paths/to/project/commenter_be/database/database.sqlite
DB_HOST=127.0.0.1
DB_PORT=3306
DB_USERNAME=root
DB_PASSWORD=

इसके बाद, टिप्पणी माइग्रेशन बनाने के लिए इस कमांड को चलाएँ और इसे निम्न स्क्रिप्ट के साथ अपडेट करें:

php artisan make:migration create_comments_table

को खोलो डेटाबेस/माइग्रेशन/xxxx_create_comments_table_xxxx.php इस कोड में फ़ाइल और पेस्ट करें:

<?php
use IlluminateDatabaseMigrationsMigration;
use IlluminateDatabaseSchemaBlueprint;
use IlluminateSupportFacadesSchema;
class CreateCommentsTable extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::create('comments', function (Blueprint $table) {
            $table->id();
            $table->string('content');
            $table->string('author');
            $table->timestamps();
        });
    }
    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::dropIfExists('comments');
    }
}

यह एक नई टिप्पणी डेटाबेस तालिका बनाएगा और सामग्री और लेखक कॉलम जोड़ देगा।

अंत में, माइग्रेशन बनाने के लिए, यह कमांड चलाएँ:

php artisan migrate

3. मॉडल बनाना

Laravel में, मॉडल महत्वपूर्ण हैं — वे हमारे डेटाबेस के साथ संचार करने और डेटा प्रबंधन को संभालने का सबसे सुरक्षित तरीका हैं।

लारवेल में एक मॉडल बनाने के लिए, हम निम्नलिखित कमांड चलाएंगे:

php artisan make:model Comment

अगला, खोलें ऐप/मॉडल/टिप्पणी.php निम्नलिखित कोड में फ़ाइल और पेस्ट करें:

<?php
namespace AppModels;
use IlluminateDatabaseEloquentFactoriesHasFactory;
use IlluminateDatabaseEloquentModel;
class Comment extends Model
{
    use HasFactory;
    protected $fillable = ['content', 'author'];
}

The $fillable array allows us to create and update the model in mass.

4. नियंत्रक बनाना

नियंत्रक महत्वपूर्ण हैं क्योंकि वे हमारे अनुप्रयोगों के सभी तर्क, व्यवसाय, और अन्यथा, रखते हैं, तो आइए टिप्पणी तर्क को संभालने के लिए एक बनाएं:

php artisan make:controller CommentController

अगला, खोलें ऐप/एचटीपी/नियंत्रक/टिप्पणी नियंत्रक.php निम्नलिखित कोड में फ़ाइल और पेस्ट करें:

<?php
namespace AppHttpControllers;
use AppModelsComment;
use AppEventsCommentEvent;
use IlluminateHttpRequest;

class CommentController extends Controller
{
    //
    public function index()
    {
        return view('comments');
    }
    public function fetchComments()
    {
        $comments = Comment::all();
        return response()->json($comments);
    }
    public function store(Request $request)
    {
        $comment = Comment::create($request->all());
        event(new CommentEvent($comment));
        return $comment;
    }
}

नियंत्रक की तीन अलग-अलग विधियाँ हैं: एक टिप्पणी दृश्य लौटाएँ, सभी टिप्पणियाँ प्राप्त करें, और क्रमशः एक नई टिप्पणी संग्रहीत करें। सबसे महत्वपूर्ण बात यह है कि हर बार जब हम एक नई टिप्पणी संग्रहीत करते हैं, तो हम एक घटना को आग लगाते हैं, जो कि पुशर और लारवेल इको का उपयोग करके वास्तविक समय में नई टिप्पणी के साथ प्रासंगिक पृष्ठ को अपडेट करने के लिए फ्रंटएंड सुनेगा।

5. मार्ग बनाना

हमारे मार्गों को ठीक से कॉन्फ़िगर करने के लिए, हमें बहुत से अपडेट करने की आवश्यकता होगी फ़ाइलें, तो चलो शुरू हो जाओ।

सबसे पहले, हम अपडेट करने जा रहे हैं एपीआई.php मार्ग फ़ोल्डर में फ़ाइल। फ़ाइल खोलें और निम्न कोड जोड़ें:

use AppHttpControllersCommentController;
//...

Route::get('/', [CommentController::class, 'index']);
Route::get('/comments', [CommentController::class, 'fetchComments']);
Route::post('/comments', [CommentController::class, 'store']);

अगला, खोलें channel.php उसी फ़ोल्डर में फ़ाइल करें और उस ईवेंट को अधिकृत करने के लिए निम्न कोड जोड़ें जिसे हमने पहले निकाल दिया था:

Broadcast::channel('comment', function ($user) {
    return true;
});

अगला, खोलें वेब.php उसी फ़ोल्डर में फ़ाइल करें और हमारे अनुरोध को होमपेज पर रीडायरेक्ट करने के लिए निम्नलिखित कोड जोड़ें, जहां Vue.js इसे उठाएगा:

use AppHttpControllersCommentController;
//...

Route::get('/', [CommentController::class, 'index']);

अंत में, हम इसमें एक नई ब्लेड फ़ाइल बनाएंगे संसाधन/विचार फ़ोल्डर कहा जाता है टिप्पणियाँ.ब्लेड.php और निम्नलिखित कोड जोड़ें:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Commenter</title>
    <meta name="csrf-token" content="{{ csrf_token() }}">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">

    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.1/css/bulma.min.css" />
    <style>
        .container {
            margin: 0 auto;
            position: relative;
            width: unset;
        }
        #app {
            width: 60%;
            margin: 4rem auto;
        }
        .question-wrapper {
            text-align: center;
        }
    </style>
</head>
<body>


    <div id="app">
        <div class="container">
            <div class="question-wrapper">
                <h5 class="is-size-2" style="color: #220052;">
                    What do you think about <span style="color: #47b784;">Dogs</span>?</h5>
                <br>
                <a href="#Form" class="button is-medium has-shadow has-text-white" style="background-color: #47b784">Comment</a>
            </div>
            <br><br>
            <comments></comments>
            <new-comment></new-comment>
        </div>
    </div>
    <script async src="{{mix('js/app.js')}}"></script>
</body>
</html>

स्क्रिप्ट ऊपर बनाए गए पोस्ट शीर्षक में नई टिप्पणियों को प्रदर्शित करने और जोड़ने के लिए एक पोस्ट शीर्षक और एक Vue घटक जोड़ता है।

यदि आप सब कुछ सही ढंग से प्राप्त करते हैं, तो परीक्षण करने के लिए निम्नलिखित कमांड चलाएँ:

npm run watch

php artisan serve

यदि आपको यह पृष्ठ प्रस्तुत किया गया है, तो आप इस लेख के अगले चरण पर जाने के लिए तैयार हैं।

Laravel . में लाइव कमेंटिंग सिस्टम

Laravel . में लाइव कमेंटिंग सिस्टम

6. Vue (फ्रंटेंड) की स्थापना

हम इस पर की गई सभी टिप्पणियों को बनाने और प्रदर्शित करने के लिए अपना Vue उदाहरण बनाएंगे और सेट करेंगे पद.

हम अपना Vuex स्टोर स्थापित करने के साथ शुरुआत करेंगे। संसाधन/जेएस/स्टोर फ़ोल्डर में निम्न फ़ाइलें बनाएं।

टिप्पणी राज्य बनाएं

क्रियाएँ.js बनाएँ और निम्नलिखित कोड जोड़ें:

let actions = {
    ADD_COMMENT({ commit }, comment) {
        return new Promise((resolve, reject) => {
            axios
                .post(`/comments`, comment)
                .then(response => {
                    resolve(response);
                })
                .catch(err => {
                    reject(err);
                });
        });
    },
    GET_COMMENTS({ commit }) {
        axios
            .get("/comments")
            .then(res => {
                {
                    commit("GET_COMMENTS", res.data);
                }
            })
            .catch(err => {
                console.log(err);
            });
    }
};
export default actions;

एक्शन फ़ाइल बैकएंड में टिप्पणी समापन बिंदु पर कॉल करती है।

इसके बाद, एक getters.js फ़ाइल बनाएँ और निम्नलिखित कोड जोड़ें:

let getters = {
    comments: state => {
        return state.comments;
    }
};
export default getters;

गेट्टर फ़ाइल का उपयोग राज्य में सभी टिप्पणियों को पुनः प्राप्त करने के लिए किया जाता है।

म्यूटेशन.जेएस फाइल बनाएं और इसे निम्नलिखित कोड में पेस्ट करें:

let mutations = {
    GET_COMMENTS(state, comments) {
        state.comments = comments;
    },
    ADD_COMMENT(state, comment) {
        state.comments = [...state.comments, comment];
    }
};
export default mutations;

इसके बाद, एक State.js फाइल बनाएं और इसे निम्नलिखित कोड में पेस्ट करें:

let state = {
    comments: []
};
export default state;

अंत में, हम सब कुछ index.js फ़ाइल को Vue इंस्टेंस में निर्यात करने के लिए जोड़ देंगे, एक index.js फ़ाइल बनाएँगे और निम्नलिखित जोड़ेंगे:

import Vue from "vue";
import Vuex from "vuex";
import actions from "./actions";
import mutations from "./mutations";
import getters from "./getters";
import state from "./state";
Vue.use(Vuex);
export default new Vuex.Store({
    state,
    mutations,
    getters,
    actions
});

अवयव बनाएं

अंत में, हम नई टिप्पणियों को प्रदर्शित करने और जोड़ने के लिए अपने टिप्पणी घटक बनाने जा रहे हैं। आइए एकल टिप्पणी घटक बनाकर शुरू करें।

में एक फ़ोल्डर बनाएँ संसाधन/जेएस घटक नामक फ़ोल्डर, जोड़ें टिप्पणी.व्यू और निम्नलिखित कोड जोड़ें:

<template>
  <li class="comment-wrapper animate slideInLeft">
    <div class="profile">
    </div>
    <div class="msg has-shadow">
      <div class="msg-body">
        <p class="name">
          {{ comment.author }} <span class="date">{{ posted_at }}</span>
        </p>
        <p class="content">{{ comment.content }}</p>
      </div>
    </div>
  </li>
</template>
    
    <script>
export default {
  name: "Comment",
  props: ["comment"],
  computed: {
    posted_at() {
      return moment(this.comment.created_at).format("MMMM Do YYYY");
    },

  },
};
</script>
    
    <style lang="scss" scoped>
.comment-wrapper {
  list-style: none;
  text-align: left;
  overflow: hidden;
  margin-bottom: 2em;
  padding: 0.4em;
  .profile {
    width: 80px;
    float: left;
  }
  .msg-body {
    padding: 0.8em;
    color: #666;
    line-height: 1.5;
  }
  .msg {
    width: 86%;
    float: left;
    background-color: #fff;
    border-radius: 0 5px 5px 5px;
    position: relative;
    &::after {
      content: " ";
      position: absolute;
      left: -13px;
      top: 0;
      border: 14px solid transparent;
      border-top-color: #fff;
    }
  }
  .date {
    float: right;
  }
  .name {
    margin: 0;
    color: #999;
    font-weight: 700;
    font-size: 0.8em;
  }
  p:last-child {
    margin-top: 0.6em;
    margin-bottom: 0;
  }
}
</style>

इसके बाद, निम्न फ़ाइल बनाएं जिसे कहा जाता है टिप्पणियाँ.व्यू उसी फ़ोल्डर में और निम्न कोड जोड़ें:

<template>
  <div class="container">
    <ul class="comment-list">
      <Comment
        :key="comment.id"
        v-for="comment in comments"
        :comment="comment"
      ></Comment>
    </ul>
  </div>
</template>
    
    <script>
import { mapGetters } from "vuex";
import Comment from "./Comment";
export default {
  name: "Comments",
  components: { Comment },
  mounted() {
    this.$store.dispatch("GET_COMMENTS");
    this.listen();
  },
  methods: {
    listen() {
      Echo.channel("comment").listen("comment", (e) => {
        console.log(e);
        this.$store.commit("ADD_COMMENT", e);
      });
    },
  },
  computed: {
    ...mapGetters(["comments"]),
  },
};
</script>
    
    <style scoped>
.comment-list {
  padding: 1em 0;
  margin-bottom: 15px;
}
</style>

अंत में, नाम की एक फाइल बनाएं NewComment.vue और निम्नलिखित कोड जोड़ें:

<template>
  <div id="commentForm" class="box has-shadow has-background-white">
    <form @keyup.enter="postComment">
      <div class="field has-margin-top">
        <div class="field has-margin-top">
          <label class="label">Your name</label>
          <div class="control">
            <input
              type="text"
              placeholder="Your name"
              class="input is-medium"
              v-model="comment.author"
            />
          </div>
        </div>
        <div class="field has-margin-top">
          <label class="label">Your comment</label>
          <div class="control">
            <textarea
              style="height: 100px"
              name="comment"
              class="input is-medium"
              autocomplete="true"
              v-model="comment.content"
              placeholder="lorem ipsum"
            ></textarea>
          </div>
        </div>
        <div class="control has-margin-top">
          <button
            style="background-color: #47b784"
            :class="{ 'is-loading': submit }"
            class="button has-shadow is-medium has-text-white"
            :disabled="!isValid"
            @click.prevent="postComment"
            type="submit"
          >
            Submit
          </button>
        </div>
      </div>
    </form>
    <br />
  </div>
</template>
    
    <script>
export default {
  name: "NewComment",
  data() {
    return {
      submit: false,
      comment: {
        content: "",
        author: "",
      },
    };
  },
  methods: {
    postComment() {
      this.submit = true;
      this.$store
        .dispatch("ADD_COMMENT", this.comment)
        .then((response) => {
          this.submit = false;
          if (response.data) console.log("success");
        })
        .catch((err) => {
          console.log(err);
          this.submit = false;
        });
    },
  },
  computed: {
    isValid() {
      return this.comment.content !== "" && this.comment.author !== "";
    },
  },
};
</script>
    
    <style scoped>
.has-margin-top {
  margin-top: 15px;
}
</style>

अब, खोलें app.js फ़ाइल और आपके द्वारा पहले बनाए गए Vue घटकों को पंजीकृत करने के लिए निम्नलिखित कोड जोड़ें:

// resource/js/app.js

require("./bootstrap");
window.Vue = require("vue");
import store from "./store/index";

Vue.component("comment", require("./components/Comment"));
Vue.component("comments", require("./components/Comments"));
Vue.component("new-comment", require("./components/NewComment"));

const app = new Vue({
    el: "#app",
    store
});

अपनी व्यक्तिगत टिप्पणी प्रणाली बनाना चाहते हैं? 💬 इस पोस्ट में वह सब कुछ है जो आपको आरंभ करने के लिए चाहिएट्वीट करने के लिए क्लिक करें

सारांश

और बस! आपने अभी अभी सीखा है कि Laravel का उपयोग करके अपनी साइट के लिए लाइव कमेंटिंग सिस्टम कैसे बनाया जाता है।

हमने आपके समुदाय या ब्लॉग में विश्वास बनाने की आपकी खोज में एक टिप्पणी प्रणाली बनाने और प्रबंधित करने के लाभों पर चर्चा की है। हमने यह भी पता लगाया है कि अलग-अलग कमेंटिंग फंक्शनलिटी का उपयोग करते हुए ग्राउंड अप से एक अच्छी तरह से डिज़ाइन और रीयल-टाइम कमेंटिंग सिस्टम कैसे विकसित किया जाए।

आप इस प्रोजेक्ट के सोर्स कोड को क्लोन कर सकते हैं यह जीथब रेपो.

लारवेल लाइव कमेंटिंग सिस्टम के बारे में आप क्या सोचते हैं जिसे हमने एक साथ बनाया है? हमें टिप्पणियों में बताएं!


समय, लागत बचाएं और साइट के प्रदर्शन को अधिकतम करें:

  • वर्डप्रेस होस्टिंग विशेषज्ञों से तुरंत मदद, 24/7।
  • क्लाउडफ्लेयर एंटरप्राइज इंटीग्रेशन।
  • वैश्विक दर्शक दुनिया भर में 28 डेटा केंद्रों के साथ पहुंचते हैं।
  • हमारे अंतर्निहित एप्लिकेशन प्रदर्शन निगरानी के साथ अनुकूलन।

वह सब और बहुत कुछ, एक योजना में जिसमें कोई दीर्घकालिक अनुबंध नहीं है, सहायता प्राप्त माइग्रेशन, और 30-दिन-मनी-बैक-गारंटी। हमारी योजनाओं की जाँच करें या बिक्री से बात करो उस योजना को खोजने के लिए जो आपके लिए सही है।

Leave a Comment