Site icon bytesyria

أفضل طريقة لبناء موقع laravel مع react.js

أفضل طريقة لبناء موقع laravel مع react.js

أفضل طريقة لبناء موقع laravel مع react.js

في كل يوم هناك اكتشاف علمي جديد يوجهنا نحو أفضل نتائج ممكنة، ويعد مجال البرمجة من أهم المجالات التي تطور بشكل يوم، ويعد مصطلح الصفحة الواحدة SPA من أهمها اليوم

فهذا المصطلح نشأ مع نشوء اطر العمل في JavaScript وتعددت البرمجيات مثل Laravel في برمجة المواقع لكن قد يصعب تعدد هذه التقنيات مثل react مع laravel ونحن هنا لذكر طرق استخدام هاتين التقنيتين معاً

ما المقصود ب laravel

لارافل (بالإنجليزية: Laravel)‏ هو منصة برمجية لتطبيقات الإنترنت مفتوح المصدر أو إطار عمل لتطوير تطبيقات الويب مكتوب بلغة PHP. أطلق Taylor Otwell لارافل في شهر فبراير 2012م.

في ديسمبر 2013م، أصبحت لارافل من أحد أشهر أُطر العمل المعمولة بـ PHP وذلك وفقاً لإحصاء تم عمله من قبل المطورون، wikipedia

ما المقصود ب react.js

رياكت ‏، مكتبة برمجية مبنية بلغة جافا سكربت، مفتوحة المصدر مُتخصصة بواجهات المستخدم تم بناؤها من قبل شركة ميتا المعروفة سابقًا بفيسبوك، ريآكت تُقدم طريقة سلسة وقوية لبناء الواجهات المستخدم

تسمح للمطورين بتصميم وتطوير مُكوِّنات واجهة مستخدم تفاعلية ‏ ومن ثم إعادة استخدام المكون ذاته عدة مرات في أماكن متعددة wikipedia

طرق بناء موقع laravel مع react

كان الشائع هو بناء REST API من قبل مبرمج back-end وبناء التصميم الأساسي من قبل مبرمج front-end لكن اليوم قد تختلف هذه الفكرة

برزت في الفترة الاخيرة برمجية جديدة باسم Laravel breeze تهدف لإنشاء نظام تسجيل دخول متكامل وذلك من خلال احدى الوجهات التالية:

استخدام laravel breeze

هو تطبيق لجميع عمليات المصادقة (authentication) وهو عبارة عن تطويرة ل Laravel UI

يقدم صفحات جاهزة لعمليات المصادقة بتصميم لطيف من خلال استخدام اطار العمل Tailwindcss

أضاف في التحديثات الأخيرة إنشاء التطبيقات باستخدام react و vue.js

مساوئ

محاسن

استخدام API

من أكثر الطرق شيوعاً كما قلناً، لإمكانية استخدامه لأي لغة برمجة back-end وإمكانية إستخدامه في تطبيقات الهاتف المحمول


لقد تكلمنا عنها سابقاً: API ماذا تعني هذه الكلمة


على سبيل المثال إذا أردت إنشاء مشروع وأردت إنشاء موقع ويب وقمت بإنشائه باستخدام laravel و react عندما تريد إنشاء تطبيق لمشروعك سواء كانت برمجة التطبيق باستخدام برمجية react-native أو أي لغة برمجة يمكنك إستخدام نفس ال API الموجود في الموق

مساوئ

محاسن

تجربتي بإنشاء موقع laravel مع react

بعدما بحثت وحاولت وصلت للنتائج التالية:

  1. بناء REST API من خلال Laravel
  2. تصميم الوجهات بإستخدام React بمشروع منفصل
  3. تخزين Token لكل شخص يقوم بالتسجيل من خلال إنشائه وتخزين في جدول users وحفظه في Cookes بالنسبة لل front-end
  4. في كل عملية تحتاج لتسجيل أرسل ال Token الموجود في Cookes في header الاتصال المرسل
  5. عند الانتهاء من المشروع أضع الملفات النهائية (الملفات بعد عملية build) مع بنية Laravel وأقوم بتخصيص السيو في داخلها مع تغير عنوان كل صفحة من خلال react

في النهاية وصلت للنتيجة التالية بالأداء:

نتيجة دمج react مع laravel
نتيجة دمج react مع laravel

الاسئلة التي راودتني أثناء عملية التطوير

لا بد لكل شخص يحاول لأول مرة بناء تطبيق باستخدام laravel و react أن تراوده الأسئلة التالية ويحتاج لأجوبة فعلية

كيفية إنشاء نظام مصادقة

منذ أن بدأت بتعلم laravel بشكل ذاتي بدون أن أخذ أية نصيحة من شخص يملك خبرة فيها ودون أخذ دورة تدريبة وتكملتها؛ كنت أسئل نفسي ماهي وظيفة عامود remember_token فلم أستخدمه قط بالمشاريع السابقة التي استخدمت بها اطار العمل Laravel

عندما استخدمت برمجية laravel breeze لاحظت إضافة Token لهذا العامود وسرد نفس ال Token في ال props التي تحفظ في attribute لعنصر html

قمت بإنشاء تصميم بسيط يحوي حقول معلومات تسجيل الدخول وعند الضغط على الزر يقوم بإرسال طلب يتأكد من المعلومات في ال API وفي حال كانت صحيحة يتم إرجاع Token جديد يتم تخزينه في cooke لإستخدامه لاحقاً

جلب المعلومات التي تحتاج لمصادقة

كما تكلمت سابقاً من خلال تخزين token لكن عملية الارسال هي التي وقفت عندها لثوان

في البداية قمت بإرسال ال token من خلال وضع header مع request ال API كما في المثال التالي:

import React, {useState, useEffect} from "react";
export default React.memo(() => {
  let [titleSite,setTitleSite] = useData("Title");
  useEffect(() => {
    fetch('URL_API',{
      method:"GET",
      headers: {
         Accept: 'application/json',
        'Content-Type': 'application/json',
        'USER_TOKEN': "HereTokenMember" // جلب التوكن من ال cookes
      },
    }).then(result => result.json()).then(resultData => setTitleSite(resultData.title));
  },[]);
  return <h1>{titleSite}</h1>
}); 

يوضح كيفية استدعاء اسم الموقع من ال API وذلك بإستخدام hooks react الضروريان لهذه العملية لكي يتم الاتصال بال API لمرة واحدة

رفع صورة

كأن السؤول الأكثر غموضاً كيفية رفع صورة، بعد بحث طويل وعميق وصلت للتالي:

  1. لا يجب أن ارسل أي header بمفتاح Content-Type
  2. عند إرسال بيانات بطريقة POST لا يجب إرسال البيانات كنوع json أو باستخدام التابع التالي: JSON.stringify
  3. البيانات المرسلة يجب أن تكون من نوع FormData وإضافة كل البيانات لها

مثلاً:

import React, { useState, useRef, useCallback } from "react";
export default React.memo(() => {
    let name = useRef();
    let photo = useRef();
    let [isUpload, setIsUpload] = useState(false);
    let uploadFile = useCallback(() => {
        if (isUpload) {
            let data = new FormData();
            data.append('name', name.current.value);
            data.append('photo', photo.current.value);
            setIsUpload(true);
            fetch('API_UPLOAD', {
                method: "POST",
                headers: {
                    Accept: 'application/json',
                    'USER_TOKEN': "HereTokenMember" // جلب التوكن من ال cookes
                },
                body: data
            })
                .then((result) => result.json())
                .then((resultUpload) => setIsUpload(false));
        }
    }, [isUpload]);
    return <div>
        <h2>إضافة عضو</h2>
        <input type="text" placeholder="الاسم" ref={name} />
        <input type="file" ref={photo} />
        <span tabIndex={0} role="button" onClick={uploadFile} aria-pressed="false"></span>
    </div>
});



تخصيص ال SEO

يعد ال SEO من أهم الأمور التي أخذت بحسابنها، بعد الانتهاء من التصميم قمت بوضع الملفات النهائية في بنية laravel ووضعت ملف html الخاص بملف blade وقمت بالأفكار التالية:


if (request()->path() == '/') {
  // الصفحة الرئيسية
} else if (in_array(request()->path(),['privacy-policy','terms-of-use'])) {
  // سياسة الخصوصية أو الشروط
} else {
  // صفحات غير ضرورية يجب أن لا تتأرشف
}

رفع المشروع

بعد رفع المشروع واجهة مشكلة كبيرة وهي عدم استقبال السيرفر لل header المخصص

قمت بالقليل من البحث لكن لم أصل لأي نتيجة بهذا الخصوص فوجدت عند إرسال أي اتصال ان السيرفر يستقبل الكوكيز

قمت بجعل نظام المصداقية في ال back-end من خلال الكوكيز وليس header مرسل مع الاتصال ونجحت الفكرة

ختاماً

ذكرنا في مقالنا هذا طرق بناء موقع laravel مع react مع محاسن ومساوئ كل طريقة وذكرت تجربتي في ذلك

في حال أعجبك الموقع لا تنسا مشاركته مع صديقك وقراءة المقالات المختلفة على موقعنا

Exit mobile version