\u003C!-- عرض مؤشر تحميل أثناء التحميل -->\n \u003C/template>\n\n \u003Ctemplate #default>\n \u003CCourseCard\n v-for=\"course in courses\"\n :key=\"course.id\"\n :course=\"course\"\n />\n \u003C/template>\n \u003C/Deferred>\n\n \u003C!-- عرض البيانات المؤجلة للموضوعات -->\n \u003CDeferred :data=\"topics\">\n \u003Ctemplate #fallback>\n \u003CLoadingSpinner /> \u003C!-- عرض مؤشر تحميل أثناء التحميل -->\n \u003C/template>\n\n \u003Ctemplate #default>\n \u003CTopicCard\n v-for=\"topic in topics\"\n :key=\"topic.id\"\n :topic=\"topic\"\n />\n \u003C/template>\n \u003C/Deferred>\n \u003C/div>\n\u003C/template>\n\n\u003Cscript>\nexport default {\n props: {\n courses: Array,\n topics: Array,\n },\n};\n\u003C/script>\n","vue",[167,2398,2399,2408,2417,2430,2434,2439,2456,2471,2484,2493,2497,2510,2517,2527,2537,2547,2552,2560,2568,2572,2577,2592,2604,2614,2622,2626,2638,2645,2654,2663,2673,2677,2685,2693,2702,2710,2714,2723,2733,2738,2743,2748,2753,2758],{"__ignoreMap":115},[183,2400,2401,2403,2406],{"class":185,"line":12},[183,2402,714],{"class":267},[183,2404,2405],{"class":717},"template",[183,2407,729],{"class":267},[183,2409,2410,2413,2415],{"class":185,"line":24},[183,2411,2412],{"class":267}," \u003C",[183,2414,718],{"class":717},[183,2416,729],{"class":267},[183,2418,2419,2421,2423,2426,2428],{"class":185,"line":35},[183,2420,734],{"class":267},[183,2422,124],{"class":717},[183,2424,2425],{"class":267},">الدورات\u003C/",[183,2427,124],{"class":717},[183,2429,729],{"class":267},[183,2431,2432],{"class":185,"line":47},[183,2433,284],{"emptyLinePlaceholder":9},[183,2435,2436],{"class":185,"line":58},[183,2437,2438],{"class":254}," \u003C!-- عرض البيانات المؤجلة للدورات -->\n",[183,2440,2441,2443,2446,2449,2451,2454],{"class":185,"line":70},[183,2442,734],{"class":267},[183,2444,2445],{"class":717},"Deferred",[183,2447,2448],{"class":188}," :data",[183,2450,353],{"class":267},[183,2452,2453],{"class":192},"\"courses\"",[183,2455,729],{"class":267},[183,2457,2458,2461,2463,2466,2469],{"class":185,"line":301},[183,2459,2460],{"class":267}," \u003C",[183,2462,2405],{"class":717},[183,2464,2465],{"class":267}," #",[183,2467,2468],{"class":188},"fallback",[183,2470,729],{"class":267},[183,2472,2473,2475,2478,2481],{"class":185,"line":316},[183,2474,778],{"class":267},[183,2476,2477],{"class":717},"LoadingSpinner",[183,2479,2480],{"class":267}," /> ",[183,2482,2483],{"class":254},"\u003C!-- عرض مؤشر تحميل أثناء التحميل -->\n",[183,2485,2486,2489,2491],{"class":185,"line":322},[183,2487,2488],{"class":267}," \u003C/",[183,2490,2405],{"class":717},[183,2492,729],{"class":267},[183,2494,2495],{"class":185,"line":347},[183,2496,284],{"emptyLinePlaceholder":9},[183,2498,2499,2501,2503,2505,2508],{"class":185,"line":367},[183,2500,2460],{"class":267},[183,2502,2405],{"class":717},[183,2504,2465],{"class":267},[183,2506,2507],{"class":188},"default",[183,2509,729],{"class":267},[183,2511,2512,2514],{"class":185,"line":373},[183,2513,778],{"class":267},[183,2515,2516],{"class":717},"CourseCard\n",[183,2518,2519,2522,2524],{"class":185,"line":379},[183,2520,2521],{"class":188}," v-for",[183,2523,353],{"class":267},[183,2525,2526],{"class":192},"\"course in courses\"\n",[183,2528,2529,2532,2534],{"class":185,"line":384},[183,2530,2531],{"class":188}," :key",[183,2533,353],{"class":267},[183,2535,2536],{"class":192},"\"course.id\"\n",[183,2538,2539,2542,2544],{"class":185,"line":390},[183,2540,2541],{"class":188}," :course",[183,2543,353],{"class":267},[183,2545,2546],{"class":192},"\"course\"\n",[183,2548,2549],{"class":185,"line":410},[183,2550,2551],{"class":267}," />\n",[183,2553,2554,2556,2558],{"class":185,"line":415},[183,2555,2488],{"class":267},[183,2557,2405],{"class":717},[183,2559,729],{"class":267},[183,2561,2562,2564,2566],{"class":185,"line":432},[183,2563,755],{"class":267},[183,2565,2445],{"class":717},[183,2567,729],{"class":267},[183,2569,2570],{"class":185,"line":450},[183,2571,284],{"emptyLinePlaceholder":9},[183,2573,2574],{"class":185,"line":462},[183,2575,2576],{"class":254}," \u003C!-- عرض البيانات المؤجلة للموضوعات -->\n",[183,2578,2579,2581,2583,2585,2587,2590],{"class":185,"line":479},[183,2580,734],{"class":267},[183,2582,2445],{"class":717},[183,2584,2448],{"class":188},[183,2586,353],{"class":267},[183,2588,2589],{"class":192},"\"topics\"",[183,2591,729],{"class":267},[183,2593,2594,2596,2598,2600,2602],{"class":185,"line":494},[183,2595,2460],{"class":267},[183,2597,2405],{"class":717},[183,2599,2465],{"class":267},[183,2601,2468],{"class":188},[183,2603,729],{"class":267},[183,2605,2606,2608,2610,2612],{"class":185,"line":510},[183,2607,778],{"class":267},[183,2609,2477],{"class":717},[183,2611,2480],{"class":267},[183,2613,2483],{"class":254},[183,2615,2616,2618,2620],{"class":185,"line":526},[183,2617,2488],{"class":267},[183,2619,2405],{"class":717},[183,2621,729],{"class":267},[183,2623,2624],{"class":185,"line":541},[183,2625,284],{"emptyLinePlaceholder":9},[183,2627,2628,2630,2632,2634,2636],{"class":185,"line":557},[183,2629,2460],{"class":267},[183,2631,2405],{"class":717},[183,2633,2465],{"class":267},[183,2635,2507],{"class":188},[183,2637,729],{"class":267},[183,2639,2640,2642],{"class":185,"line":572},[183,2641,778],{"class":267},[183,2643,2644],{"class":717},"TopicCard\n",[183,2646,2647,2649,2651],{"class":185,"line":588},[183,2648,2521],{"class":188},[183,2650,353],{"class":267},[183,2652,2653],{"class":192},"\"topic in topics\"\n",[183,2655,2656,2658,2660],{"class":185,"line":603},[183,2657,2531],{"class":188},[183,2659,353],{"class":267},[183,2661,2662],{"class":192},"\"topic.id\"\n",[183,2664,2665,2668,2670],{"class":185,"line":625},[183,2666,2667],{"class":188}," :topic",[183,2669,353],{"class":267},[183,2671,2672],{"class":192},"\"topic\"\n",[183,2674,2675],{"class":185,"line":631},[183,2676,2551],{"class":267},[183,2678,2679,2681,2683],{"class":185,"line":637},[183,2680,2488],{"class":267},[183,2682,2405],{"class":717},[183,2684,729],{"class":267},[183,2686,2687,2689,2691],{"class":185,"line":1446},[183,2688,755],{"class":267},[183,2690,2445],{"class":717},[183,2692,729],{"class":267},[183,2694,2695,2698,2700],{"class":185,"line":1467},[183,2696,2697],{"class":267}," \u003C/",[183,2699,718],{"class":717},[183,2701,729],{"class":267},[183,2703,2704,2706,2708],{"class":185,"line":1488},[183,2705,1011],{"class":267},[183,2707,2405],{"class":717},[183,2709,729],{"class":267},[183,2711,2712],{"class":185,"line":1494},[183,2713,284],{"emptyLinePlaceholder":9},[183,2715,2716,2718,2721],{"class":185,"line":1505},[183,2717,714],{"class":267},[183,2719,2720],{"class":717},"script",[183,2722,729],{"class":267},[183,2724,2725,2728,2731],{"class":185,"line":1511},[183,2726,2727],{"class":260},"export",[183,2729,2730],{"class":260}," default",[183,2732,1146],{"class":267},[183,2734,2735],{"class":185,"line":1523},[183,2736,2737],{"class":267}," props: {\n",[183,2739,2740],{"class":185,"line":1536},[183,2741,2742],{"class":267}," courses: Array,\n",[183,2744,2745],{"class":185,"line":1547},[183,2746,2747],{"class":267}," topics: Array,\n",[183,2749,2750],{"class":185,"line":1568},[183,2751,2752],{"class":267}," },\n",[183,2754,2755],{"class":185,"line":1573},[183,2756,2757],{"class":267},"};\n",[183,2759,2760,2762,2764],{"class":185,"line":1579},[183,2761,1011],{"class":267},[183,2763,2720],{"class":717},[183,2765,729],{"class":267},[171,2767,2348],{"id":2768},"الشرح-1",[132,2770,2771,2779,2787],{},[135,2772,2773,2778],{},[850,2774,2775],{},[167,2776,2777],{},"\u003CDeferred>",": يتم استخدام هذا المكون للتعامل مع البيانات المؤجلة. يتم جلب البيانات تلقائيًا عند الحاجة.",[135,2780,2781,2786],{},[850,2782,2783],{},[167,2784,2785],{},"#fallback",": يتم استخدام هذا الفتحة لعرض مؤشر تحميل (أو أي واجهة بديلة) أثناء جلب البيانات.",[135,2788,2789,2794],{},[850,2790,2791],{},[167,2792,2793],{},"#default",": يتم استخدام هذا الفتحة لعرض البيانات الفعلية بمجرد تحميلها.",[142,2796],{},[145,2798,2800],{"id":2799},"فوائد-استخدام-deferred-props","فوائد استخدام Deferred Props",[2802,2803,2804,2809,2815],"ol",{},[135,2805,2806,2808],{},[850,2807,2109],{},": عن طريق تأجيل البيانات غير الضرورية، يتم تقليل حجم البيانات الأولية، مما يؤدي إلى تحميل الصفحة بشكل أسرع.",[135,2810,2811,2814],{},[850,2812,2813],{},"تجربة مستخدم أفضل",": يرى المستخدمون المحتوى الأكثر أهمية أولاً، بينما يتم تحميل البيانات غير الضرورية في الخلفية.",[135,2816,2817,2820],{},[850,2818,2819],{},"استخدام فعال للموارد",": يتم تحميل البيانات فقط عند الحاجة، مما يقلل من الحمل غير الضروري على الخادم وعرض النطاق الترددي.",[142,2822],{},[145,2824,2825],{"id":2825},"الخلاصة",[128,2827,2828],{},"تعد Deferred Props في Inertia 2 ميزة قوية لتحسين أداء تطبيقاتك. عن طريق تأجيل البيانات غير الضرورية، يمكنك ضمان تحميل تطبيقك بسرعة وكفاءة، مما يوفر تجربة أفضل للمستخدمين.",[128,2830,2831],{},"توضح الأمثلة أعلاه كيفية تنفيذ Deferred Props في كل من الواجهة الخلفية والأمامية. جربها في مشروعك القادم وشاهد الفرق بنفسك!",[142,2833],{},[171,2835,2836],{"id":2836},"مصادر",[132,2838,2839,2848],{},[135,2840,2841],{},[2842,2843,2847],"a",{"href":2844,"rel":2845},"https://inertiajs.com/",[2846],"nofollow","توثيق Inertia.js",[135,2849,2850],{},[2842,2851,2854],{"href":2852,"rel":2853},"https://laracasts.com/series/inertia-2-unleashed/episodes/3",[2846],"فيديو Laracast",[2027,2856,2857],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}",{"title":115,"searchDepth":24,"depth":24,"links":2859},[2860,2861,2864,2867,2868],{"id":2092,"depth":24,"text":2093},{"id":2121,"depth":24,"text":2122,"children":2862},[2863],{"id":2347,"depth":35,"text":2348},{"id":2381,"depth":24,"text":2382,"children":2865},[2866],{"id":2768,"depth":35,"text":2348},{"id":2799,"depth":24,"text":2800},{"id":2825,"depth":24,"text":2825,"children":2869},[2870],{"id":2836,"depth":35,"text":2836},"أضافت Inertia 2 ميزة قوية تسمى Deferred Props، والتي تتيح لك تأجيل تحميل البيانات غير الضرورية حتى يتم طلبها. يمكن أن يؤدي ذلك إلى تحسين أداء تطبيقك بشكل كبير عن طريق تقليل حجم البيانات الأولية وتسريع وقت تحميل الصفحة. في هذا الدليل، سنستعرض كيفية استخدام Deferred Props مع أمثلة عملية.","Inertia.js","/assets/img/blog/inertia/deferred-props-inertia-2.png","deferred-props-inertia-2-practical-examples","Inertia.js, Inertia 2, Deferred Props, تحسين الأداء, Laravel, Vue.js, React, تطبيق صفحة واحدة, جلب البيانات, التحميل البطيء, تحسين الواجهة الأمامية, تحسين الواجهة الخلفية, توثيق Inertia, ميزات Inertia, أمثلة برمجية, حالات استخدام واقعية","Inertia.js, Vue.js",{},"/ar/2025/01/2025-01-deferred-props-inertia-2-practical-examples","2025-01-15T12:41:00.000Z",{"title":2069,"description":2871},{"loc":2878},"ar/2025/01/2025-01-deferred-props-inertia-2-practical-examples","دليل عملي لاستخدام Deferred Props","في Inertia 2","XjsS-oVTH8IW8QbPOMucMB6sJ4syVayKlgeCbTqyx_I",{"id":2887,"title":2888,"body":2889,"category":2049,"client":2050,"description":3454,"extension":2052,"head":2053,"image":3455,"key":3456,"keywords":3457,"languages":2053,"meta":3458,"navigation":9,"ogImage":2050,"order":373,"path":3459,"preview1":115,"preview1Title":115,"preview2":115,"preview2Title":115,"preview3":115,"preview3Title":115,"project":2050,"publishedAt":3460,"ready":9,"robots":2050,"schemaOrg":2050,"seo":3461,"sitemap":3462,"stem":3463,"title_sub":3464,"title_sub_blue":3465,"visible":9,"__hash__":3466},"articles_ar/ar/2025/01/2025-01-A-Practical-Guide-to-API-Documentation-in-Laravel-with-Scribe.md","دليل عملي لتوثيق API في Laravel باستخدام Scribe",{"type":100,"value":2890,"toc":3444},[2891,2893,2895,2897,2901,2944,2946,2950,2953,2958,2969,2972,2975,2977,2979,2982,2999,3002,3018,3029,3031,3033,3039,3071,3074,3205,3207,3210,3213,3227,3237,3239,3242,3245,3271,3274,3431,3433,3435,3438,3441],[103,2892],{":description":105,":image":106,":keywords":107,":title":108},[110,2894],{":src":106},[113,2896],{":client":115,":languages":116,":preview1":117,":preview1-title":118,":preview2":119,":preview2-title":120,":preview3":121,":preview3-title":122,":project":115},[145,2898,2900],{"id":2899},"جدول-المحتويات","جدول المحتويات",[2802,2902,2903,2909,2915,2920,2926,2932,2938],{},[135,2904,2905],{},[2842,2906,2908],{"href":2907},"#%D8%A7%D9%84%D9%85%D9%82%D8%AF%D9%85%D8%A9","المقدمة",[135,2910,2911],{},[2842,2912,2914],{"href":2913},"#%D9%85%D8%A7-%D9%87%D9%88-laravel-scribe","ما هو Laravel Scribe؟",[135,2916,2917],{},[2842,2918,173],{"href":2919},"#%D8%A7%D9%84%D8%AA%D8%AB%D8%A8%D9%8A%D8%AA",[135,2921,2922],{},[2842,2923,2925],{"href":2924},"#%D8%A7%D9%84%D8%AA%D9%83%D9%88%D9%8A%D9%86","التكوين",[135,2927,2928],{},[2842,2929,2931],{"href":2930},"#%D8%A5%D9%86%D8%B4%D8%A7%D8%A1-%D8%A7%D9%84%D8%AA%D9%88%D8%AB%D9%8A%D9%82","إنشاء التوثيق",[135,2933,2934],{},[2842,2935,2937],{"href":2936},"#%D8%AA%D8%AE%D8%B5%D9%8A%D8%B5-%D8%A7%D9%84%D8%AA%D9%88%D8%AB%D9%8A%D9%82","تخصيص التوثيق",[135,2939,2940],{},[2842,2941,2943],{"href":2942},"#%D8%A7%D9%84%D8%AE%D8%A7%D8%AA%D9%85%D8%A9","الخاتمة",[142,2945],{},[145,2947,2948],{"id":2908},[850,2949,2908],{},[128,2951,2952],{},"تخيل أنك انتهيت للتو من تطوير REST API لمشروع ما. ما هي الخطوة التالية؟ يمكن أن تكون عملية التوثيق اليدوي مملة وعرضة للأخطاء وتستغرق وقتًا طويلًا. هنا يأتي دور Scribe—حزمة Laravel رائعة تنشئ توثيق واجهات API تلقائيًا.",[128,2954,2955],{},[850,2956,2957],{},"ما الذي يتناوله هذا المقال:",[2802,2959,2960,2963,2966],{},[135,2961,2962],{},"لماذا يعد Scribe مفيدًا.",[135,2964,2965],{},"كيفية تثبيته وتهيئته واستخدامه.",[135,2967,2968],{},"أمثلة عملية من الاستخدام في الواقع العملي.",[145,2970,2914],{"id":2971},"ما-هو-laravel-scribe",[128,2973,2974],{},"Laravel Scribe هو حزمة تقوم تلقائيًا بإنشاء توثيق لواجهات برمجة التطبيقات (API) من خلال مسارات Laravel. يستخرج المعلومات من وحدات التحكم (Controllers)، طلبات النماذج (Form Requests)، والمكونات الأخرى لإنشاء توثيق تفصيلي. يتضمن هذا التوثيق النقاط الطرفية (Endpoints)، معاملات الطلبات، أمثلة الاستجابات، والمزيد.",[142,2976],{},[145,2978,173],{"id":173},[128,2980,2981],{},"لبدء استخدام Laravel Scribe، تحتاج إلى تثبيته عبر Composer. قم بتنفيذ الأمر التالي في الطرفية:",[175,2983,2985],{"className":177,"code":2984,"language":179,"meta":115,"style":115},"composer require --dev knuckleswtf/scribe\n",[167,2986,2987],{"__ignoreMap":115},[183,2988,2989,2991,2993,2996],{"class":185,"line":12},[183,2990,189],{"class":188},[183,2992,193],{"class":192},[183,2994,2995],{"class":210}," --dev",[183,2997,2998],{"class":192}," knuckleswtf/scribe\n",[128,3000,3001],{},"بعد تثبيت الحزمة، يمكنك نشر ملف التكوين باستخدام:",[175,3003,3005],{"className":177,"code":3004,"language":179,"meta":115,"style":115},"php artisan vendor:publish --tag=scribe-config\n",[167,3006,3007],{"__ignoreMap":115},[183,3008,3009,3011,3013,3015],{"class":185,"line":12},[183,3010,201],{"class":188},[183,3012,204],{"class":192},[183,3014,207],{"class":192},[183,3016,3017],{"class":210}," --tag=scribe-config\n",[128,3019,3020,3021,3024,3025,3028],{},"سيؤدي هذا إلى إنشاء ملف ",[167,3022,3023],{},"scribe.php"," في مجلد ",[167,3026,3027],{},"config",".",[142,3030],{},[145,3032,2925],{"id":2925},[128,3034,3035,3036,3038],{},"يسمح ملف ",[167,3037,3023],{}," بتخصيص جوانب مختلفة من توثيق واجهة برمجة التطبيقات. بعض الإعدادات الرئيسية تشمل:",[132,3040,3041,3048,3055,3063],{},[135,3042,3043,3047],{},[850,3044,3045],{},[167,3046,108],{},": عنوان توثيق واجهة برمجة التطبيقات.",[135,3049,3050,3054],{},[850,3051,3052],{},[167,3053,105],{},": وصف مختصر لواجهة برمجة التطبيقات.",[135,3056,3057,3062],{},[850,3058,3059],{},[167,3060,3061],{},"base_url",": الرابط الأساسي لواجهة برمجة التطبيقات.",[135,3064,3065,3070],{},[850,3066,3067],{},[167,3068,3069],{},"routes",": تحديد المسارات التي يجب تضمينها في التوثيق.",[128,3072,3073],{},"إليك مثال على التكوين:",[175,3075,3077],{"className":245,"code":3076,"language":247,"meta":115,"style":115},"return [\n 'title' => 'توثيق واجهة برمجة التطبيقات الخاصة بي',\n 'description' => 'هذا هو توثيق واجهة برمجة التطبيقات لتطبيقي.',\n 'base_url' => env('APP_URL'),\n 'routes' => [\n [\n 'match' => [\n 'prefixes' => ['api/*'],\n ],\n 'include' => [],\n 'exclude' => [],\n ],\n ],\n];\n",[167,3078,3079,3086,3098,3110,3127,3136,3141,3150,3166,3171,3181,3190,3195,3200],{"__ignoreMap":115},[183,3080,3081,3084],{"class":185,"line":12},[183,3082,3083],{"class":260},"return",[183,3085,447],{"class":267},[183,3087,3088,3091,3093,3096],{"class":185,"line":24},[183,3089,3090],{"class":192}," 'title'",[183,3092,438],{"class":260},[183,3094,3095],{"class":192}," 'توثيق واجهة برمجة التطبيقات الخاصة بي'",[183,3097,600],{"class":267},[183,3099,3100,3103,3105,3108],{"class":185,"line":35},[183,3101,3102],{"class":192}," 'description'",[183,3104,438],{"class":260},[183,3106,3107],{"class":192}," 'هذا هو توثيق واجهة برمجة التطبيقات لتطبيقي.'",[183,3109,600],{"class":267},[183,3111,3112,3115,3117,3120,3122,3125],{"class":185,"line":47},[183,3113,3114],{"class":192}," 'base_url'",[183,3116,438],{"class":260},[183,3118,3119],{"class":188}," env",[183,3121,334],{"class":267},[183,3123,3124],{"class":192},"'APP_URL'",[183,3126,1323],{"class":267},[183,3128,3129,3132,3134],{"class":185,"line":58},[183,3130,3131],{"class":192}," 'routes'",[183,3133,438],{"class":260},[183,3135,447],{"class":267},[183,3137,3138],{"class":185,"line":70},[183,3139,3140],{"class":267}," [\n",[183,3142,3143,3146,3148],{"class":185,"line":301},[183,3144,3145],{"class":192}," 'match'",[183,3147,438],{"class":260},[183,3149,447],{"class":267},[183,3151,3152,3155,3157,3160,3163],{"class":185,"line":316},[183,3153,3154],{"class":192}," 'prefixes'",[183,3156,438],{"class":260},[183,3158,3159],{"class":267}," [",[183,3161,3162],{"class":192},"'api/*'",[183,3164,3165],{"class":267},"],\n",[183,3167,3168],{"class":185,"line":322},[183,3169,3170],{"class":267}," ],\n",[183,3172,3173,3176,3178],{"class":185,"line":347},[183,3174,3175],{"class":192}," 'include'",[183,3177,438],{"class":260},[183,3179,3180],{"class":267}," [],\n",[183,3182,3183,3186,3188],{"class":185,"line":367},[183,3184,3185],{"class":192}," 'exclude'",[183,3187,438],{"class":260},[183,3189,3180],{"class":267},[183,3191,3192],{"class":185,"line":373},[183,3193,3194],{"class":267}," ],\n",[183,3196,3197],{"class":185,"line":379},[183,3198,3199],{"class":267}," ],\n",[183,3201,3202],{"class":185,"line":384},[183,3203,3204],{"class":267},"];\n",[142,3206],{},[145,3208,2931],{"id":3209},"إنشاء-التوثيق",[128,3211,3212],{},"بعد تكوين Laravel Scribe، يمكنك إنشاء التوثيق عن طريق تنفيذ الأمر التالي:",[175,3214,3216],{"className":177,"code":3215,"language":179,"meta":115,"style":115},"php artisan scribe:generate\n",[167,3217,3218],{"__ignoreMap":115},[183,3219,3220,3222,3224],{"class":185,"line":12},[183,3221,201],{"class":188},[183,3223,204],{"class":192},[183,3225,3226],{"class":192}," scribe:generate\n",[128,3228,3229,3230,3233,3234,3028],{},"سيؤدي هذا الأمر إلى إنشاء مجموعة من ملفات HTML ثابتة في مجلد ",[167,3231,3232],{},"public/docs"," بشكل افتراضي. يمكنك الوصول إلى التوثيق من خلال زيارة الرابط ",[167,3235,3236],{},"http://your-app-url/docs",[142,3238],{},[145,3240,2937],{"id":3241},"تخصيص-التوثيق",[128,3243,3244],{},"يسمح Laravel Scribe بتخصيص التوثيق عن طريق إضافة التعليقات التوضيحية (Annotations) إلى وحدات التحكم والطرق. إليك بعض التعليقات التوضيحية الشائعة:",[132,3246,3247,3255,3263],{},[135,3248,3249,3254],{},[850,3250,3251],{},[167,3252,3253],{},"@group",": يجمع النقاط الطرفية ذات الصلة معًا.",[135,3256,3257,3262],{},[850,3258,3259],{},[167,3260,3261],{},"@bodyParam",": يصف معاملات جسم الطلب.",[135,3264,3265,3270],{},[850,3266,3267],{},[167,3268,3269],{},"@response",": يوفر مثالاً للاستجابة.",[128,3272,3273],{},"إليك مثال لطريقة في وحدة التحكم مع التعليقات التوضيحية:",[175,3275,3277],{"className":245,"code":3276,"language":247,"meta":115,"style":115},"/**\n * @group إدارة المستخدمين\n *\n * تسجيل مستخدم جديد.\n *\n * @bodyParam name string required اسم المستخدم. مثال: Akram Ghaleb\n * @bodyParam email string required البريد الإلكتروني للمستخدم. مثال: akram@example.com\n * @bodyParam password string required كلمة مرور المستخدم. مثال: password123\n *\n * @response 200 {\n * \"message\": \"تم تسجيل المستخدم بنجاح\",\n * \"user\": {\n * \"id\": 1,\n * \"name\": \"Akram Ghaleb\",\n * \"email\": \"akram@example.com\"\n * }\n * }\n */\npublic function register(Request $request)\n{\n // منطق التسجيل هنا\n}\n",[167,3278,3279,3284,3294,3299,3304,3308,3317,3332,3341,3345,3354,3359,3364,3369,3374,3384,3389,3394,3399,3418,3422,3427],{"__ignoreMap":115},[183,3280,3281],{"class":185,"line":12},[183,3282,3283],{"class":254},"/**\n",[183,3285,3286,3289,3291],{"class":185,"line":24},[183,3287,3288],{"class":254}," * ",[183,3290,3253],{"class":260},[183,3292,3293],{"class":254}," إدارة المستخدمين\n",[183,3295,3296],{"class":185,"line":35},[183,3297,3298],{"class":254}," *\n",[183,3300,3301],{"class":185,"line":47},[183,3302,3303],{"class":254}," * تسجيل مستخدم جديد.\n",[183,3305,3306],{"class":185,"line":58},[183,3307,3298],{"class":254},[183,3309,3310,3312,3314],{"class":185,"line":70},[183,3311,3288],{"class":254},[183,3313,3261],{"class":260},[183,3315,3316],{"class":254}," name string required اسم المستخدم. مثال: Akram Ghaleb\n",[183,3318,3319,3321,3323,3326,3329],{"class":185,"line":301},[183,3320,3288],{"class":254},[183,3322,3261],{"class":260},[183,3324,3325],{"class":254}," email string required البريد الإلكتروني للمستخدم. مثال: akram",[183,3327,3328],{"class":260},"@example",[183,3330,3331],{"class":254},".com\n",[183,3333,3334,3336,3338],{"class":185,"line":316},[183,3335,3288],{"class":254},[183,3337,3261],{"class":260},[183,3339,3340],{"class":254}," password string required كلمة مرور المستخدم. مثال: password123\n",[183,3342,3343],{"class":185,"line":322},[183,3344,3298],{"class":254},[183,3346,3347,3349,3351],{"class":185,"line":347},[183,3348,3288],{"class":254},[183,3350,3269],{"class":260},[183,3352,3353],{"class":254}," 200 {\n",[183,3355,3356],{"class":185,"line":367},[183,3357,3358],{"class":254}," * \"message\": \"تم تسجيل المستخدم بنجاح\",\n",[183,3360,3361],{"class":185,"line":373},[183,3362,3363],{"class":254}," * \"user\": {\n",[183,3365,3366],{"class":185,"line":379},[183,3367,3368],{"class":254}," * \"id\": 1,\n",[183,3370,3371],{"class":185,"line":384},[183,3372,3373],{"class":254}," * \"name\": \"Akram Ghaleb\",\n",[183,3375,3376,3379,3381],{"class":185,"line":390},[183,3377,3378],{"class":254}," * \"email\": \"akram",[183,3380,3328],{"class":260},[183,3382,3383],{"class":254},".com\"\n",[183,3385,3386],{"class":185,"line":410},[183,3387,3388],{"class":254}," * }\n",[183,3390,3391],{"class":185,"line":415},[183,3392,3393],{"class":254}," * }\n",[183,3395,3396],{"class":185,"line":432},[183,3397,3398],{"class":254}," */\n",[183,3400,3401,3404,3406,3409,3411,3413,3415],{"class":185,"line":450},[183,3402,3403],{"class":267},"public ",[183,3405,2229],{"class":260},[183,3407,3408],{"class":188}," register",[183,3410,334],{"class":267},[183,3412,338],{"class":337},[183,3414,341],{"class":337},[183,3416,3417],{"class":267},")\n",[183,3419,3420],{"class":185,"line":462},[183,3421,319],{"class":267},[183,3423,3424],{"class":185,"line":479},[183,3425,3426],{"class":254}," // منطق التسجيل هنا\n",[183,3428,3429],{"class":185,"line":494},[183,3430,640],{"class":267},[142,3432],{},[145,3434,2943],{"id":2943},[128,3436,3437],{},"Laravel Scribe أداة لا غنى عنها لإنشاء توثيق واجهات برمجة التطبيقات في تطبيقات Laravel. يبسط العملية، ويضمن الاتساق، ويوفر واجهة توثيق احترافية. باتباع الخطوات المذكورة في هذه المقالة، يمكنك بسهولة دمج Laravel Scribe في مشروعك وإنشاء توثيق شامل لواجهة برمجة التطبيقات.",[128,3439,3440],{},"برمجة موفقة! 🚀",[2027,3442,3443],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}",{"title":115,"searchDepth":24,"depth":24,"links":3445},[3446,3447,3448,3449,3450,3451,3452,3453],{"id":2899,"depth":24,"text":2900},{"id":2908,"depth":24,"text":2908},{"id":2971,"depth":24,"text":2914},{"id":173,"depth":24,"text":173},{"id":2925,"depth":24,"text":2925},{"id":3209,"depth":24,"text":2931},{"id":3241,"depth":24,"text":2937},{"id":2943,"depth":24,"text":2943},"تخيل أنك انتهيت للتو من تطوير REST API لمشروع ما. ما هي الخطوة التالية؟ يمكن أن تكون عملية التوثيق اليدوي مملة وعرضة للأخطاء وتستغرق وقتًا طويلاً. هنا يأتي دور Scribe—حزمة Laravel رائعة تنشئ توثيق واجهات API تلقائيًا.","/assets/img/blog/laravel/A-Practical-Guide-to-API-Documentation-in-Laravel-with-Scribe.png","a-practical-guide-to-api-documentation-in-laravel-with-scribe","حزمة Scribe, توثيق وبرمجة التطبيقات (API), Laravel, إنشاء توثيق API تلقائي, Composer, Artisan, PHPDoc, نقاط نهاية REST, تهيئة واجهة API, توثيق تفاعلي, واجهات REST وGraphQL, نشر التوثيق, أفضل الممارسات, تخصيص التوثيق, تعليقات توضيحية للـControllers, CI/CD, Public/docs, دعم اللغات المتعددة, Bearer Authentication, صيانة واجهة الـAPI",{},"/ar/2025/01/2025-01-a-practical-guide-to-api-documentation-in-laravel-with-scribe","2025-01-02T17:27:00.000Z",{"title":2888,"description":3454},{"loc":3459},"ar/2025/01/2025-01-A-Practical-Guide-to-API-Documentation-in-Laravel-with-Scribe","دليل عملي لتوثيق API ","باستخدام Scribe في Laravel","UddV9TOKbw7anaqFiwK7w7Z_NTctL1t7kfTzNwGMPCc",{"id":3468,"title":3469,"body":3470,"category":2049,"client":2050,"description":3888,"extension":2052,"head":2053,"image":3889,"key":3890,"keywords":3891,"languages":2053,"meta":3892,"navigation":9,"ogImage":2050,"order":367,"path":3893,"preview1":115,"preview1Title":115,"preview2":115,"preview2Title":115,"preview3":115,"preview3Title":115,"project":2050,"publishedAt":3894,"ready":9,"robots":2050,"schemaOrg":2050,"seo":3895,"sitemap":3896,"stem":3897,"title_sub":3898,"title_sub_blue":3899,"visible":9,"__hash__":3900},"articles_ar/ar/2024/11/2024-11-Speed-Up-Laravel-Projects-with-Laravel-Shift-Blueprint.md","3 خطوات لتسريع مشاريع Laravel باستخدام Laravel Shift Blueprint",{"type":100,"value":3471,"toc":3881},[3472,3474,3476,3478,3483,3494,3496,3500,3503,3519,3526,3528,3535,3544,3547,3795,3798,3800,3804,3810,3824,3830,3832,3836,3869,3875,3878],[103,3473],{":description":105,":image":106,":keywords":107,":title":108},[110,3475],{":src":106},[113,3477],{":client":115,":languages":116,":preview1":117,":preview1-title":118,":preview2":119,":preview2-title":120,":preview3":121,":preview3-title":122,":project":115},[124,3479,3481],{"id":3480},"_3-خطوات-لتسريع-مشاريع-laravel-باستخدام-laravel-shift-blueprint",[850,3482,3469],{},[128,3484,3485,3486,3493],{},"إذا كنت ترغب في تقليل المهام البرمجية المتكررة وإطلاق مشاريع Laravel الخاصة بك بشكل أسرع، فإن ",[850,3487,3488],{},[2842,3489,3492],{"href":3490,"rel":3491},"https://blueprint.laravelshift.com",[2846],"Laravel Shift Blueprint"," هو الأداة المثالية لك! إليك دليل مبسط حول كيفية استخدام Blueprint بفعالية في ثلاث خطوات سهلة.",[142,3495],{},[171,3497,3499],{"id":3498},"_1-تثبيت-blueprint","1. تثبيت Blueprint",[128,3501,3502],{},"لبدء الاستخدام، قم بتثبيت Blueprint في بيئة التطوير الخاصة بك باستخدام Composer:",[175,3504,3506],{"className":177,"code":3505,"language":179,"meta":115,"style":115},"composer require --dev laravel-shift/blueprint\n",[167,3507,3508],{"__ignoreMap":115},[183,3509,3510,3512,3514,3516],{"class":185,"line":12},[183,3511,189],{"class":188},[183,3513,193],{"class":192},[183,3515,2995],{"class":210},[183,3517,3518],{"class":192}," laravel-shift/blueprint\n",[128,3520,3521,3522,3525],{},"يُعد Blueprint حزمة مخصصة للتطوير فقط، لذلك من الأفضل تثبيته باستخدام العلامة ",[167,3523,3524],{},"--dev",". هذا يضمن عدم تضمينه في بيئة الإنتاج، مما يحافظ على خفة ونظافة عملية النشر.",[142,3527],{},[171,3529,3531,3532],{"id":3530},"_2-إنشاء-ملف-draftyaml","2. إنشاء ملف ",[167,3533,3534],{},"draft.yaml",[128,3536,3537,3538,3540,3541,3543],{},"ملف ",[167,3539,3534],{}," هو قلب Blueprint – إنه المكان الذي تعرف فيه models، وcontrollers، والعلاقات، بل وحتى المسارات! ابدأ بإنشاء ملف ",[167,3542,3534],{}," في الدليل الجذري لمشروعك.",[128,3545,3546],{},"يقرأ Blueprint هذا الملف لفهم هيكل تطبيقك. إليك مثال إعداد لمدونة:",[175,3548,3552],{"className":3549,"code":3550,"language":3551,"meta":115,"style":115},"language-yaml shiki shiki-themes github-light github-dark","models:\n Post:\n title: string\n content: text\n published_at: timestamp nullable\n status: string\n category_id: unsignedInteger nullable\n relationships:\n belongsTo: Category\n belongsToMany: Tag, Author\n\n Category:\n name: string\n description: string nullable\n relationships:\n hasMany: Post\n\n Author:\n name: string\n email: string\n bio: text nullable\n twitter_handle: string nullable\n relationships:\n belongsToMany: Post\n\n Tag:\n name: string\n slug: string\n relationships:\n belongsToMany: Post\n","yaml",[167,3553,3554,3562,3569,3580,3590,3600,3609,3619,3626,3636,3646,3650,3657,3666,3676,3682,3692,3696,3703,3711,3720,3730,3739,3745,3753,3757,3764,3772,3781,3787],{"__ignoreMap":115},[183,3555,3556,3559],{"class":185,"line":12},[183,3557,3558],{"class":717},"models",[183,3560,3561],{"class":267},":\n",[183,3563,3564,3567],{"class":185,"line":24},[183,3565,3566],{"class":717}," Post",[183,3568,3561],{"class":267},[183,3570,3571,3574,3577],{"class":185,"line":35},[183,3572,3573],{"class":717}," title",[183,3575,3576],{"class":267},": ",[183,3578,3579],{"class":192},"string\n",[183,3581,3582,3585,3587],{"class":185,"line":47},[183,3583,3584],{"class":717}," content",[183,3586,3576],{"class":267},[183,3588,3589],{"class":192},"text\n",[183,3591,3592,3595,3597],{"class":185,"line":58},[183,3593,3594],{"class":717}," published_at",[183,3596,3576],{"class":267},[183,3598,3599],{"class":192},"timestamp nullable\n",[183,3601,3602,3605,3607],{"class":185,"line":70},[183,3603,3604],{"class":717}," status",[183,3606,3576],{"class":267},[183,3608,3579],{"class":192},[183,3610,3611,3614,3616],{"class":185,"line":301},[183,3612,3613],{"class":717}," category_id",[183,3615,3576],{"class":267},[183,3617,3618],{"class":192},"unsignedInteger nullable\n",[183,3620,3621,3624],{"class":185,"line":316},[183,3622,3623],{"class":717}," relationships",[183,3625,3561],{"class":267},[183,3627,3628,3631,3633],{"class":185,"line":322},[183,3629,3630],{"class":717}," belongsTo",[183,3632,3576],{"class":267},[183,3634,3635],{"class":192},"Category\n",[183,3637,3638,3641,3643],{"class":185,"line":347},[183,3639,3640],{"class":717}," belongsToMany",[183,3642,3576],{"class":267},[183,3644,3645],{"class":192},"Tag, Author\n",[183,3647,3648],{"class":185,"line":367},[183,3649,284],{"emptyLinePlaceholder":9},[183,3651,3652,3655],{"class":185,"line":373},[183,3653,3654],{"class":717}," Category",[183,3656,3561],{"class":267},[183,3658,3659,3662,3664],{"class":185,"line":379},[183,3660,3661],{"class":717}," name",[183,3663,3576],{"class":267},[183,3665,3579],{"class":192},[183,3667,3668,3671,3673],{"class":185,"line":384},[183,3669,3670],{"class":717}," description",[183,3672,3576],{"class":267},[183,3674,3675],{"class":192},"string nullable\n",[183,3677,3678,3680],{"class":185,"line":390},[183,3679,3623],{"class":717},[183,3681,3561],{"class":267},[183,3683,3684,3687,3689],{"class":185,"line":410},[183,3685,3686],{"class":717}," hasMany",[183,3688,3576],{"class":267},[183,3690,3691],{"class":192},"Post\n",[183,3693,3694],{"class":185,"line":415},[183,3695,284],{"emptyLinePlaceholder":9},[183,3697,3698,3701],{"class":185,"line":432},[183,3699,3700],{"class":717}," Author",[183,3702,3561],{"class":267},[183,3704,3705,3707,3709],{"class":185,"line":450},[183,3706,3661],{"class":717},[183,3708,3576],{"class":267},[183,3710,3579],{"class":192},[183,3712,3713,3716,3718],{"class":185,"line":462},[183,3714,3715],{"class":717}," email",[183,3717,3576],{"class":267},[183,3719,3579],{"class":192},[183,3721,3722,3725,3727],{"class":185,"line":479},[183,3723,3724],{"class":717}," bio",[183,3726,3576],{"class":267},[183,3728,3729],{"class":192},"text nullable\n",[183,3731,3732,3735,3737],{"class":185,"line":494},[183,3733,3734],{"class":717}," twitter_handle",[183,3736,3576],{"class":267},[183,3738,3675],{"class":192},[183,3740,3741,3743],{"class":185,"line":510},[183,3742,3623],{"class":717},[183,3744,3561],{"class":267},[183,3746,3747,3749,3751],{"class":185,"line":526},[183,3748,3640],{"class":717},[183,3750,3576],{"class":267},[183,3752,3691],{"class":192},[183,3754,3755],{"class":185,"line":541},[183,3756,284],{"emptyLinePlaceholder":9},[183,3758,3759,3762],{"class":185,"line":557},[183,3760,3761],{"class":717}," Tag",[183,3763,3561],{"class":267},[183,3765,3766,3768,3770],{"class":185,"line":572},[183,3767,3661],{"class":717},[183,3769,3576],{"class":267},[183,3771,3579],{"class":192},[183,3773,3774,3777,3779],{"class":185,"line":588},[183,3775,3776],{"class":717}," slug",[183,3778,3576],{"class":267},[183,3780,3579],{"class":192},[183,3782,3783,3785],{"class":185,"line":603},[183,3784,3623],{"class":717},[183,3786,3561],{"class":267},[183,3788,3789,3791,3793],{"class":185,"line":625},[183,3790,3640],{"class":717},[183,3792,3576],{"class":267},[183,3794,3691],{"class":192},[128,3796,3797],{},"هذا الملف المبسط بصيغة YAML يعرف models متعددة، وحقول، وعلاقات في مكان واحد، مما يسمح لك بنمذجة هيكل بيانات التطبيق بأقل جهد ممكن.",[142,3799],{},[171,3801,3803],{"id":3802},"_3-توليد-الكود-باستخدام-blueprint","3. توليد الكود باستخدام Blueprint",[128,3805,3806,3807,3809],{},"بمجرد تعريف models في ",[167,3808,3534],{},"، حان الوقت للسماح لـ Blueprint بالقيام بالسحر. شغّل الأمر التالي لتوليد الكود:",[175,3811,3813],{"className":177,"code":3812,"language":179,"meta":115,"style":115},"php artisan blueprint:build\n",[167,3814,3815],{"__ignoreMap":115},[183,3816,3817,3819,3821],{"class":185,"line":12},[183,3818,201],{"class":188},[183,3820,204],{"class":192},[183,3822,3823],{"class":192}," blueprint:build\n",[128,3825,3826,3827,3829],{},"يقرأ هذا الأمر ملف ",[167,3828,3534],{}," ويقوم تلقائيًا بتوليد models، وmigrations، وcontrollers، والمسارات بناءً على مواصفاتك. سترى ملفات تم إنشاؤها لكل model وعلاقة، مما يوفر عليك كتابة الكود الأساسي يدويًا.",[142,3831],{},[171,3833,3835],{"id":3834},"نصائح-إضافية-لتحسين-سير-العمل","نصائح إضافية لتحسين سير العمل",[132,3837,3838,3847,3860],{},[135,3839,3840,3843,3844,3846],{},[850,3841,3842],{},"إضافة خصائص وعلاقات مخصصة",": يمكنك دائمًا تعديل ",[167,3845,3534],{}," لإضافة خصائص إضافية أو علاقات معقدة حسب نمو التطبيق. على سبيل المثال، يمكنك إضافة قيود فريدة أو حقول اختيارية أو مفاتيح خارجية.",[135,3848,3849,3852,3853,3855,3856,3859],{},[850,3850,3851],{},"إعادة التوليد في أي وقت",": لا يُعد Blueprint أداة تُستخدم مرة واحدة فقط. مع تطور التطبيق، يمكنك تحديث ملف ",[167,3854,3534],{}," وإعادة تشغيل ",[167,3857,3858],{},"php artisan blueprint:build",". هذا سيعدل models، وmigrations، والمكونات الأخرى دون الكتابة فوق الكود الذي قمت بتعديله بالفعل.",[135,3861,3862,3865,3866,3868],{},[850,3863,3864],{},"تعريف Requests، Factories، وControllers",": يدعم Blueprint أيضًا تعريف طلبات النماذج والمصانع والمتحكمات المخصصة للمساعدة في هيكلة سلوك التطبيق في ",[167,3867,3534],{},". يسرع هذا التطوير ويحافظ على كود نظيف ومنظم.",[128,3870,3871,3872,3874],{},"جرّب ",[850,3873,3492],{},"، واكتشف كيف يمكن أن يغير سير العمل الخاص بك في Laravel، مما يساعدك على بناء الميزات بسرعة وكفاءة أكبر.",[128,3876,3877],{},"برمجة ممتعة! 🚀\n🚀",[2027,3879,3880],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}",{"title":115,"searchDepth":24,"depth":24,"links":3882},[3883,3884,3886,3887],{"id":3498,"depth":35,"text":3499},{"id":3530,"depth":35,"text":3885},"2. إنشاء ملف draft.yaml",{"id":3802,"depth":35,"text":3803},{"id":3834,"depth":35,"text":3835},"عزز سرعة تطوير مشاريع لارافيل باستخدام Laravel Shift Blueprint! اكتشف دليلًا من 3 خطوات لأتمتة إنشاء النماذج، والهجرات، والمتحكمات باستخدام Blueprint، مما يساعدك على تقليل المهام المتكررة وإطلاق مشاريعك بشكل أسرع.","/assets/img/blog/laravel/Laravel-Projects-with-Laravel-Shift-Blueprint.jpg","speed-up-laravel-projects-with-laravel-shift-blueprint","دليل Laravel Shift Blueprint, أتمتة تطوير لارافيل, مولد النماذج والهجرات في لارافيل, إعداد YAML في Blueprint, علاقات لارافيل في Blueprint, دروس Laravel Blueprint, تسريع تطوير لارافيل, أتمتة كود لارافيل, إنشاء نماذج لارافيل, دليل Blueprint لمطوري لارافيل, أتمتة Laravel Shift, مثال على draft.yaml في لارافيل, كفاءة Blueprint في لارافيل, تسريع مشاريع لارافيل باستخدام Blueprint, أفضل ممارسات Blueprint في لارافيل",{},"/ar/2024/11/2024-11-speed-up-laravel-projects-with-laravel-shift-blueprint","2024-11-12T13:12:00.000Z",{"title":3469,"description":3888},{"loc":3893},"ar/2024/11/2024-11-Speed-Up-Laravel-Projects-with-Laravel-Shift-Blueprint","3 خطوات لتسريع مشاريع Laravel باستخدام"," Laravel Shift Blueprint","_iskqJVFKIjY21MgvCmga0d1GZY1Wcs3hf65vtYq5ho",{"id":3902,"title":3903,"body":3904,"category":2049,"client":2050,"description":4314,"extension":2052,"head":2053,"image":4315,"key":4316,"keywords":4317,"languages":2053,"meta":4318,"navigation":9,"ogImage":2050,"order":301,"path":4319,"preview1":4320,"preview1Title":4321,"preview2":115,"preview2Title":115,"preview3":4322,"preview3Title":4323,"project":2050,"publishedAt":4324,"ready":9,"robots":2050,"schemaOrg":2050,"seo":4325,"sitemap":4326,"stem":4327,"title_sub":4328,"title_sub_blue":4329,"visible":9,"__hash__":4330},"articles_ar/ar/2024/10/2024-10-How-to-Create-a-Telegram-Bot-and-Send-Messages-Using-Laravel-11.md","كيفية إنشاء بوت Telegram وإرسال الرسائل باستخدام Laravel 11",{"type":100,"value":3905,"toc":4298},[3906,3908,3910,3912,3915,3918,3922,3998,4002,4006,4009,4017,4021,4028,4034,4038,4041,4047,4053,4060,4066,4072,4076,4079,4083,4089,4212,4216,4219,4222,4275,4279,4287,4289,4292,4295],[103,3907],{":description":105,":image":106,":keywords":107,":title":108},[110,3909],{":src":106},[113,3911],{":client":115,":languages":116,":preview1":117,":preview1-title":118,":preview2":119,":preview2-title":120,":preview3":121,":preview3-title":122,":project":115},[124,3913,3903],{"id":3914},"كيفية-إنشاء-بوت-telegram-وإرسال-الرسائل-باستخدام-laravel-11",[128,3916,3917],{},"في هذه المدونة، سنكتشف كيفية إنشاء بوت Telegram ودمجه بسلاسة مع Laravel 11 في هذا الدليل الشامل. تعرّف على التعليمات خطوة بخطوة للحصول على رمز API الخاص بك، إعداد مكتبة irazasyed/telegram-bot-sdk، وإرسال الرسائل مباشرةً إلى البوت الخاص بك. سواء كنت مبتدئًا أو مطورًا ذو خبرة، يوفر هذا البرنامج التعليمي كل المعلومات الأساسية التي تحتاجها لتعزيز تطبيقاتك بقدرات المراسلة الخاصة بـ Telegram. ابدأ في بناء تجارب تفاعلية وجذابة لمستخدميك اليوم!",[145,3919,3921],{"id":3920},"الخطوة-1-إنشاء-بوت-telegram-الخاص-بك","الخطوة 1: إنشاء بوت Telegram الخاص بك",[2802,3923,3924,3930,3940,3950,3974],{},[135,3925,3926,3929],{},[850,3927,3928],{},"افتح Telegram",": قم بتشغيل تطبيق Telegram على جهازك أو الوصول إلى الإصدار الويب.",[135,3931,3932,3935,3936,3939],{},[850,3933,3934],{},"ابحث عن BotFather",": في شريط البحث، اكتب ",[167,3937,3938],{},"@BotFather"," واختر البوت الرسمي لـ BotFather. هذا البوت مسؤول عن إنشاء وإدارة البوتات الأخرى.",[135,3941,3942,3945,3946,3949],{},[850,3943,3944],{},"ابدأ محادثة",": اضغط على زر \"بدء\" أو اكتب ",[167,3947,3948],{},"/start"," لبدء المحادثة مع BotFather.",[135,3951,3952,3955,3956,3959,3960],{},[850,3953,3954],{},"إنشاء بوت جديد",": استخدم الأمر ",[167,3957,3958],{},"/newbot"," لإنشاء بوت جديد. سيطلب منك BotFather اختيار اسم واسم مستخدم للبوت الخاص بك:",[132,3961,3962,3968],{},[135,3963,3964,3967],{},[850,3965,3966],{},"الاسم",": هذا هو الاسم الذي سيظهر للبوت (مثل \"بوتي الرائع\").",[135,3969,3970,3973],{},[850,3971,3972],{},"اسم المستخدم",": يجب أن يكون فريدًا وينتهي بكلمة \"bot\" (مثل \"myawesome_bot\").",[135,3975,3976,3979,3980,3983,3984,3995,3997],{},[850,3977,3978],{},"احصل على رمز API الخاص بك",": بعد إنشاء البوت، سيقدم لك BotFather رمز API. سيبدو كالتالي:",[3981,3982],"br",{},"مثال:",[175,3985,3989],{"className":3986,"code":3987,"language":3988,"meta":115,"style":115},"language-plaintext shiki shiki-themes github-light github-dark","123456789:ABCdefGhIJKlmNoPQRstUvWxYz1234567890\n","plaintext",[167,3990,3991],{"__ignoreMap":115},[183,3992,3993],{"class":185,"line":12},[183,3994,3987],{},[3981,3996],{},"احفظ هذا الرمز حيث ستحتاجه للاتصال بين تطبيق Laravel والبوت الخاص بك.",[145,3999,4001],{"id":4000},"الخطوة-2-إعداد-laravel-11","الخطوة 2: إعداد Laravel 11",[171,4003,4005],{"id":4004},"_21-إنشاء-مشروع-laravel-جديد","2.1 إنشاء مشروع Laravel جديد",[128,4007,4008],{},"قم بإنشاء مشروع جديد من خلال تشغيل الأمر التالي:",[175,4010,4015],{"className":4011,"code":4013,"language":4014},[4012],"language-text","composer create-project laravel/laravel laravel-telegram-bot\n","text",[167,4016,4013],{"__ignoreMap":115},[171,4018,4020],{"id":4019},"_22-تثبيت-مكتبة-telegram-bot-sdk","2.2 تثبيت مكتبة Telegram Bot SDK",[128,4022,4023,4024,4027],{},"بعد ذلك، قم بتثبيت مكتبة ",[167,4025,4026],{},"irazasyed/telegram-bot-sdk"," باستخدام Composer:",[175,4029,4032],{"className":4030,"code":4031,"language":4014},[4012],"composer require irazasyed/telegram-bot-sdk\n",[167,4033,4031],{"__ignoreMap":115},[171,4035,4037],{"id":4036},"_23-إعداد-المكتبة","2.3 إعداد المكتبة",[128,4039,4040],{},"بعد تثبيت المكتبة، قم بنشر ملف التكوين باستخدام الأمر:",[175,4042,4045],{"className":4043,"code":4044,"language":4014},[4012],"php artisan vendor:publish --tag=\"telegram-config\"\n",[167,4046,4044],{"__ignoreMap":115},[128,4048,4049,4050,3028],{},"سيتم إنشاء ملف تكوين جديد في المسار ",[167,4051,4052],{},"config/telegram.php",[171,4054,4056,4057],{"id":4055},"_24-إضافة-رمز-البوت-في-ملف-env","2.4 إضافة رمز البوت في ملف ",[167,4058,4059],{},".env",[128,4061,4062,4063,4065],{},"افتح ملف ",[167,4064,4059],{}," الخاص بك وأضف رمز البوت الخاص بك:",[175,4067,4070],{"className":4068,"code":4069,"language":4014},[4012],"TELEGRAM_BOT_TOKEN=123456789:ABCdefGhIJKlmNoPQRstUvWxYz1234567890\n",[167,4071,4069],{"__ignoreMap":115},[145,4073,4075],{"id":4074},"الخطوة-3-إرسال-رسالة-إلى-البوت-الخاص-بك","الخطوة 3: إرسال رسالة إلى البوت الخاص بك",[128,4077,4078],{},"الآن وبعد أن تم إعداد البوت وتكوينه، دعنا ننشئ مسارًا لإرسال الرسائل إلى البوت.",[171,4080,4082],{"id":4081},"_31-إنشاء-مسار","3.1 إنشاء مسار",[128,4084,4062,4085,4088],{},[167,4086,4087],{},"routes/web.php"," وأضف المسار التالي:",[175,4090,4092],{"className":245,"code":4091,"language":247,"meta":115,"style":115},"use Telegram\\Bot\\Laravel\\Facades\\Telegram;\n\nRoute::get('/send-message', function () {\n $chatId = 'YOUR_CHAT_ID'; // Replace with your chat ID\n $message = 'Hello, this is a message from Laravel!';\n\n Telegram::sendMessage([\n 'chat_id' => $chatId,\n 'text' => $message,\n ]);\n\n return 'Message sent to Telegram!';\n});\n",[167,4093,4094,4099,4103,4123,4139,4151,4155,4168,4178,4188,4193,4197,4207],{"__ignoreMap":115},[183,4095,4096],{"class":185,"line":12},[183,4097,4098],{"class":267},"use Telegram\\Bot\\Laravel\\Facades\\Telegram;\n",[183,4100,4101],{"class":185,"line":24},[183,4102,284],{"emptyLinePlaceholder":9},[183,4104,4105,4107,4109,4111,4113,4116,4119,4121],{"class":185,"line":35},[183,4106,668],{"class":188},[183,4108,401],{"class":267},[183,4110,404],{"class":188},[183,4112,334],{"class":267},[183,4114,4115],{"class":192},"'/send-message'",[183,4117,4118],{"class":267},", ",[183,4120,2229],{"class":260},[183,4122,2232],{"class":267},[183,4124,4125,4128,4130,4133,4136],{"class":185,"line":47},[183,4126,4127],{"class":267}," $chatId ",[183,4129,353],{"class":260},[183,4131,4132],{"class":192}," 'YOUR_CHAT_ID'",[183,4134,4135],{"class":267},"; ",[183,4137,4138],{"class":254},"// Replace with your chat ID\n",[183,4140,4141,4144,4146,4149],{"class":185,"line":58},[183,4142,4143],{"class":267}," $message ",[183,4145,353],{"class":260},[183,4147,4148],{"class":192}," 'Hello, this is a message from Laravel!'",[183,4150,279],{"class":267},[183,4152,4153],{"class":185,"line":70},[183,4154,284],{"emptyLinePlaceholder":9},[183,4156,4157,4160,4162,4165],{"class":185,"line":301},[183,4158,4159],{"class":188}," Telegram",[183,4161,401],{"class":267},[183,4163,4164],{"class":188},"sendMessage",[183,4166,4167],{"class":267},"([\n",[183,4169,4170,4173,4175],{"class":185,"line":316},[183,4171,4172],{"class":192}," 'chat_id'",[183,4174,438],{"class":260},[183,4176,4177],{"class":267}," $chatId,\n",[183,4179,4180,4183,4185],{"class":185,"line":322},[183,4181,4182],{"class":192}," 'text'",[183,4184,438],{"class":260},[183,4186,4187],{"class":267}," $message,\n",[183,4189,4190],{"class":185,"line":347},[183,4191,4192],{"class":267}," ]);\n",[183,4194,4195],{"class":185,"line":367},[183,4196,284],{"emptyLinePlaceholder":9},[183,4198,4199,4202,4205],{"class":185,"line":373},[183,4200,4201],{"class":260}," return",[183,4203,4204],{"class":192}," 'Message sent to Telegram!'",[183,4206,279],{"class":267},[183,4208,4209],{"class":185,"line":379},[183,4210,4211],{"class":267},"});\n",[171,4213,4215],{"id":4214},"_32-الحصول-على-معرف-الدردشة-الخاص-بك","3.2 الحصول على معرف الدردشة الخاص بك",[128,4217,4218],{},"لإرسال الرسائل إلى الدردشة الخاصة بك، تحتاج إلى معرفة chat_id الخاص بك. للحصول عليه، يمكنك استخدام طريقة getUpdates.",[128,4220,4221],{},"أضف مسارًا آخر إلى ملف routes/web.php:",[175,4223,4225],{"className":245,"code":4224,"language":247,"meta":115,"style":115},"Route::get(\"/get-updates\", function () {\n $updates = Telegram::getUpdates();\n return $updates;\n});\n",[167,4226,4227,4246,4263,4271],{"__ignoreMap":115},[183,4228,4229,4231,4233,4235,4237,4240,4242,4244],{"class":185,"line":12},[183,4230,668],{"class":188},[183,4232,401],{"class":267},[183,4234,404],{"class":188},[183,4236,334],{"class":267},[183,4238,4239],{"class":192},"\"/get-updates\"",[183,4241,4118],{"class":267},[183,4243,2229],{"class":260},[183,4245,2232],{"class":267},[183,4247,4248,4251,4253,4256,4258,4261],{"class":185,"line":24},[183,4249,4250],{"class":267}," $updates ",[183,4252,353],{"class":260},[183,4254,4255],{"class":188}," Telegram",[183,4257,401],{"class":267},[183,4259,4260],{"class":188},"getUpdates",[183,4262,364],{"class":267},[183,4264,4265,4268],{"class":185,"line":35},[183,4266,4267],{"class":260}," return",[183,4269,4270],{"class":267}," $updates;\n",[183,4272,4273],{"class":185,"line":47},[183,4274,4211],{"class":267},[171,4276,4278],{"id":4277},"_33-اختبار-إرسال-الرسالة","3.3 اختبار إرسال الرسالة",[128,4280,4281,4282,4286],{},"الآن قم بزيارة الرابط ",[2842,4283,4284],{"href":4284,"rel":4285},"http://127.0.0.1:8000/send-message",[2846]," في متصفحك، واستبدل 127.0.0.1:8000 بعنوان URL الفعلي لتطبيقك. يجب أن ترى رسالة تقول \"تم إرسال الرسالة إلى Telegram!\" وتستلم الرسالة في دردشة Telegram الخاصة بك.",[145,4288,2943],{"id":2943},[128,4290,4291],{},"لقد قمت بإنشاء بوت Telegram بنجاح، وحصلت على رمز API، ودمجته في تطبيق Laravel 11 باستخدام مكتبة irazasyed/telegram-bot-sdk. الآن يمكنك بناء تفاعلات أكثر تعقيدًا مع البوت الخاص بك أو توسيع قدراته.",[128,4293,4294],{},"للمزيد من الاستكشاف، يمكنك إضافة ميزات مثل معالجة الرسائل الواردة، إعداد معالجات الأوامر، أو التكامل مع خدمات أخرى. الفرص مع بوتات Telegram لا تنتهي!",[2027,4296,4297],{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":115,"searchDepth":24,"depth":24,"links":4299},[4300,4301,4308,4313],{"id":3920,"depth":24,"text":3921},{"id":4000,"depth":24,"text":4001,"children":4302},[4303,4304,4305,4306],{"id":4004,"depth":35,"text":4005},{"id":4019,"depth":35,"text":4020},{"id":4036,"depth":35,"text":4037},{"id":4055,"depth":35,"text":4307},"2.4 إضافة رمز البوت في ملف .env",{"id":4074,"depth":24,"text":4075,"children":4309},[4310,4311,4312],{"id":4081,"depth":35,"text":4082},{"id":4214,"depth":35,"text":4215},{"id":4277,"depth":35,"text":4278},{"id":2943,"depth":24,"text":2943},"اكتشف كيفية إنشاء بوت Telegram ودمجه بسلاسة مع Laravel 11 في هذا الدليل الشامل. تعرّف على التعليمات خطوة بخطوة للحصول على رمز API الخاص بك، إعداد مكتبة irazasyed/telegram-bot-sdk، وإرسال الرسائل مباشرةً إلى البوت الخاص بك.","/assets/img/blog/laravel/Send Telegram Messages with Laravel!.png","how-to-create-a-telegram-bot-and-send-messages-using-laravel-11","Telegram bot, Laravel 11, send messages, Telegram API, PHP, messaging bot, bot creation, Telegram SDK",{},"/ar/2024/10/2024-10-how-to-create-a-telegram-bot-and-send-messages-using-laravel-11","https://youtu.be/BxSI-k2yKEM?si=-BhTZVHyzbTtfBXl","Youtube","https://github.com/akramghaleb/send-telegram-messages-with-laravel-11","Github","2024-10-01T13:12:00.000Z",{"title":3903,"description":4314},{"loc":4319},"ar/2024/10/2024-10-How-to-Create-a-Telegram-Bot-and-Send-Messages-Using-Laravel-11","كيفية إنشاء بوت Telegram ","وإرسال الرسائل باستخدام Laravel 11","4wLPIS7KqCgZjWAxukkFxugVkssi5dRtLGc3NNFW9lg",{"id":4332,"title":4333,"body":4334,"category":4674,"client":4675,"description":4349,"extension":2052,"head":4675,"image":4676,"key":4346,"keywords":4677,"languages":4678,"meta":4679,"navigation":9,"ogImage":2050,"order":70,"path":4680,"preview1":115,"preview1Title":115,"preview2":4641,"preview2Title":4323,"preview3":115,"preview3Title":115,"project":4681,"publishedAt":4682,"ready":9,"robots":2050,"schemaOrg":2050,"seo":4683,"sitemap":4684,"stem":4685,"title_sub":4686,"title_sub_blue":4681,"visible":9,"__hash__":4687},"articles_ar/ar/2024/06/2024-06-laravel-nuxt-template.md","قالب Laravel Nuxt",{"type":100,"value":4335,"toc":4669},[4336,4338,4340,4344,4347,4350,4356,4371,4374,4406,4408,4411,4417,4420,4426,4429,4435,4438,4504,4507,4572,4575,4581,4584,4590,4593,4599,4602,4608,4611,4617,4620,4626,4633,4635,4637,4644,4647,4650,4666],[103,4337],{":description":105,":image":106,":keywords":107,":title":108},[110,4339],{":src":106},[113,4341],{":client":4342,":languages":116,":preview1":117,":preview1-title":118,":preview2":119,":preview2-title":120,":preview3":121,":preview3-title":122,":project":4343},"client","project",[124,4345,4346],{"id":4346},"laravel-nuxt-template",[128,4348,4349],{},"يوفر هذا المستودع قالب بداية لبناء تطبيقات الويب باستخدام Laravel كخلفية و Nuxt.js كإطار عمل للواجهة الأمامية.",[145,4351,4353,4354],{"id":4352},"تم-بناء-هذا-المشروع-باستخدام-laravel-11-nuxt-3","تم بناء هذا المشروع باستخدام Laravel 11 + Nuxt 3 ",[3981,4355],{},[132,4357,4358,4361,4364],{},[135,4359,4360],{},"هذا القالب مبني باستخدام Laravel v11.0 و Nuxt v3.11",[135,4362,4363],{},"يدعم هذا القالب إدارة الحالة باستخدام Pinia",[135,4365,4366,4367],{},"إذا أعجبك هذا العمل، يمكنك ",[2842,4368,4370],{"href":4369},"https://github.com/akramghaleb","رؤية المزيد هنا",[145,4372,4373],{"id":4373},"الميزات",[2802,4375,4376,4390,4400],{},[135,4377,4378,4381,4382,4385,4386,4389],{},[850,4379,4380],{},"التقنيات المستخدمة:"," تعتمد هذه النسخة على ",[850,4383,4384],{},"Laravel الإصدار 11.0"," كإطار عمل للخلفية و",[850,4387,4388],{},"Nuxt الإصدار 3.11"," كإطار عمل للواجهة الأمامية. يوفر Laravel أساسًا قويًا لتطوير تطبيقات الويب بفضل بناءه النحوي الأنيق وميزاته القوية، بينما يعزز Nuxt.js تجربة التطوير من خلال تقديم إطار عمل لبناء تطبيقات Vue.js مع ميزات مثل تقسيم الكود التلقائي، واستبدال الوحدات الساخنة، وأكثر من ذلك.",[135,4391,4392,4395,4396,4399],{},[850,4393,4394],{},"إدارة الحالة:"," تتضمن النسخة ",[850,4397,4398],{},"Pinia الإصدار 2.1"," لإدارة الحالة. Pinia هو حل حديث وخفيف لإدارة الحالة لتطبيقات Vue.js. يوفر واجهة برمجة تطبيقات بسيطة وبديهية لإدارة حالة التطبيق، مما يسهل تنظيم وإدارة البيانات المعقدة في تطبيقات Vue.js. مع Pinia v2.1، يمكن للمطورين الاستفادة من الميزات المحسنة والتحسينات لإدارة الحالة في تطبيقاتهم.",[135,4401,4402,4405],{},[850,4403,4404],{},"الحالة المستمرة:"," تقدم النسخة دعمًا للحالة المستمرة، مما يسمح بتخزين بيانات حالة التطبيق في التخزين المحلي لمتصفح المستخدم. تضمن هذه الميزة استمرار بيانات المستخدم حتى بعد إغلاق المتصفح أو تحديثه، مما يعزز تجربة المستخدم من خلال توفير الاستمرارية والحفاظ على البيانات الهامة للتطبيق. من خلال الاستفادة من التخزين المحلي، يمكن للمطورين إنشاء تطبيقات أكثر مرونة وسهولة في الاستخدام تتذكر تفضيلات المستخدم وتحافظ على حالة الجلسة عبر الجلسات.",[145,4407,173],{"id":173},[128,4409,4410],{},"نسخ المستودع",[175,4412,4415],{"className":4413,"code":4414,"language":4014},[4012],"git clone https://github.com/akramghaleb/laravel-nuxt-template.git\n",[167,4416,4414],{"__ignoreMap":115},[128,4418,4419],{},"الانتقال إلى مجلد المستودع",[175,4421,4424],{"className":4422,"code":4423,"language":4014},[4012],"cd laravel-nuxt-template\n",[167,4425,4423],{"__ignoreMap":115},[128,4427,4428],{},"الانتقال إلى مجلد الواجهة الأمامية (تطبيق nuxt)",[175,4430,4433],{"className":4431,"code":4432,"language":4014},[4012],"cd frontend\n\ncp .env.example .env\n",[167,4434,4432],{"__ignoreMap":115},[128,4436,4437],{},"تأكد من تثبيت التبعيات الاتية:",[175,4439,4441],{"className":177,"code":4440,"language":179,"meta":115,"style":115},"# npm\nnpm install\n\n# pnpm\npnpm install\n\n# yarn\nyarn install\n\n# bun\nbun install\n",[167,4442,4443,4448,4456,4460,4465,4472,4476,4481,4488,4492,4497],{"__ignoreMap":115},[183,4444,4445],{"class":185,"line":12},[183,4446,4447],{"class":254},"# npm\n",[183,4449,4450,4453],{"class":185,"line":24},[183,4451,4452],{"class":188},"npm",[183,4454,4455],{"class":192}," install\n",[183,4457,4458],{"class":185,"line":35},[183,4459,284],{"emptyLinePlaceholder":9},[183,4461,4462],{"class":185,"line":47},[183,4463,4464],{"class":254},"# pnpm\n",[183,4466,4467,4470],{"class":185,"line":58},[183,4468,4469],{"class":188},"pnpm",[183,4471,4455],{"class":192},[183,4473,4474],{"class":185,"line":70},[183,4475,284],{"emptyLinePlaceholder":9},[183,4477,4478],{"class":185,"line":301},[183,4479,4480],{"class":254},"# yarn\n",[183,4482,4483,4486],{"class":185,"line":316},[183,4484,4485],{"class":188},"yarn",[183,4487,4455],{"class":192},[183,4489,4490],{"class":185,"line":322},[183,4491,284],{"emptyLinePlaceholder":9},[183,4493,4494],{"class":185,"line":347},[183,4495,4496],{"class":254},"# bun\n",[183,4498,4499,4502],{"class":185,"line":367},[183,4500,4501],{"class":188},"bun",[183,4503,4455],{"class":192},[128,4505,4506],{},"بناء الكود:",[175,4508,4510],{"className":177,"code":4509,"language":179,"meta":115,"style":115},"# npm\nnpm run generate\n\n# pnpm\npnpm run generate\n\n# yarn\nyarn generate\n\n# bun\nbun run generate\n",[167,4511,4512,4516,4526,4530,4534,4542,4546,4550,4556,4560,4564],{"__ignoreMap":115},[183,4513,4514],{"class":185,"line":12},[183,4515,4447],{"class":254},[183,4517,4518,4520,4523],{"class":185,"line":24},[183,4519,4452],{"class":188},[183,4521,4522],{"class":192}," run",[183,4524,4525],{"class":192}," generate\n",[183,4527,4528],{"class":185,"line":35},[183,4529,284],{"emptyLinePlaceholder":9},[183,4531,4532],{"class":185,"line":47},[183,4533,4464],{"class":254},[183,4535,4536,4538,4540],{"class":185,"line":58},[183,4537,4469],{"class":188},[183,4539,4522],{"class":192},[183,4541,4525],{"class":192},[183,4543,4544],{"class":185,"line":70},[183,4545,284],{"emptyLinePlaceholder":9},[183,4547,4548],{"class":185,"line":301},[183,4549,4480],{"class":254},[183,4551,4552,4554],{"class":185,"line":316},[183,4553,4485],{"class":188},[183,4555,4525],{"class":192},[183,4557,4558],{"class":185,"line":322},[183,4559,284],{"emptyLinePlaceholder":9},[183,4561,4562],{"class":185,"line":347},[183,4563,4496],{"class":254},[183,4565,4566,4568,4570],{"class":185,"line":367},[183,4567,4501],{"class":188},[183,4569,4522],{"class":192},[183,4571,4525],{"class":192},[128,4573,4574],{},"الانتقال إلى مجلد الخلفية (تطبيق laravel)",[175,4576,4579],{"className":4577,"code":4578,"language":4014},[4012],"cd ../backend\n",[167,4580,4578],{"__ignoreMap":115},[128,4582,4583],{},"تثبيت جميع التبعيات باستخدام composer",[175,4585,4588],{"className":4586,"code":4587,"language":4014},[4012],"composer install\n",[167,4589,4587],{"__ignoreMap":115},[128,4591,4592],{},"نسخ ملف البيئة الافتراضي وإجراء التغييرات المطلوبة في ملف .env",[175,4594,4597],{"className":4595,"code":4596,"language":4014},[4012],"cp .env.example .env\n",[167,4598,4596],{"__ignoreMap":115},[128,4600,4601],{},"إنشاء مفتاح تطبيق جديد",[175,4603,4606],{"className":4604,"code":4605,"language":4014},[4012],"php artisan key:generate\n",[167,4607,4605],{"__ignoreMap":115},[128,4609,4610],{},"تشغيل ترحيلات قاعدة البيانات (تحديد اتصال قاعدة البيانات في .env قبل الترحيل)",[175,4612,4615],{"className":4613,"code":4614,"language":4014},[4012],"php artisan migrate\n",[167,4616,4614],{"__ignoreMap":115},[128,4618,4619],{},"بدء خادم التطوير المحلي",[175,4621,4624],{"className":4622,"code":4623,"language":4014},[4012],"php artisan serve\n",[167,4625,4623],{"__ignoreMap":115},[128,4627,4628,4629],{},"يمكنك الآن الوصول إلى الخادم على ",[2842,4630,4631],{"href":4631,"rel":4632},"http://localhost:8000",[2846],[3981,4634],{},[142,4636],{},[128,4638,4639],{},[2842,4640,4643],{"href":4641,"rel":4642},"https://github.com/akramghaleb/laravel-nuxt-template",[2846],"Github مستودع",[128,4645,4646],{},"شكرًا،",[128,4648,4649],{},"اذا اعجبك عملي يمكنك دعمي للحفاظ على مستوى الابداع!",[128,4651,4652,4662,4664],{},[2842,4653,4656],{"href":4654,"target":4655},"https://www.buymeacoffee.com/akramghaleb","_blank",[4657,4658],"img",{"src":4659,"alt":4660,"width":4661},"https://cdn.buymeacoffee.com/buttons/v2/default-red.png","Buy Me A Coffee",150,[3981,4663],{},[3981,4665],{},[2027,4667,4668],{},"html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":115,"searchDepth":24,"depth":24,"links":4670},[4671,4672,4673],{"id":4352,"depth":24,"text":4353},{"id":4373,"depth":24,"text":4373},{"id":173,"depth":24,"text":173},"opensource","مصدر مفتوح","/assets/img/blog/opensource/laravel-nuxt-template.jpg","Laravel، Nuxt، Vue، Pinia، إدارة الحالة، تطوير الويب","Laravel، Nuxt",{},"/ar/2024/06/2024-06-laravel-nuxt-template","قالب","2024-06-09T09:08:00.000Z",{"title":4333,"description":4349},{"loc":4680},"ar/2024/06/2024-06-laravel-nuxt-template","Laravel Nuxt","0BO1Hg_D-JYu6-RERSLvnVKwT6C5Fx1nK37QPvaZ2A8",{"id":4689,"title":4690,"body":4691,"category":2049,"client":2050,"description":8098,"extension":2052,"head":2053,"image":8099,"key":8100,"keywords":8101,"languages":2053,"meta":8102,"navigation":9,"ogImage":2050,"order":58,"path":8103,"preview1":115,"preview1Title":115,"preview2":115,"preview2Title":115,"preview3":8070,"preview3Title":4323,"project":2050,"publishedAt":8104,"ready":9,"robots":2050,"schemaOrg":2050,"seo":8105,"sitemap":8106,"stem":8107,"title_sub":8108,"title_sub_blue":8109,"visible":9,"__hash__":8110},"articles_ar/ar/2024/06/2024-06-Laravel-11-Building-API-using-Sanctum.md","Laravel 11 - بناء API باستخدام Sanctum",{"type":100,"value":4692,"toc":8087},[4693,4695,4697,4699,4702,4707,4776,4780,4783,4789,4792,4798,4802,4805,4811,4815,4818,5224,5228,5231,5237,5240,5494,5497,5620,5624,5627,5633,5636,5847,5851,5854,5860,5863,6203,6206,6851,6854,7671,7675,7678,7681,7916,7920,7923,7928,7931,7936,7940,7943,7946,7989,7992,8059,8066,8073,8076,8078,8084],[103,4694],{":description":105,":image":106,":keywords":107,":title":108},[110,4696],{":src":106},[113,4698],{":client":115,":languages":116,":preview1":117,":preview1-title":118,":preview2":119,":preview2-title":120,":preview3":121,":preview3-title":122,":project":115},[124,4700,4690],{"id":4701},"laravel-11-بناء-api-باستخدام-sanctum",[4703,4704,4706],"h5",{"id":4705},"table-of-contents","Table of Contents",[132,4708,4709],{},[135,4710,4711,4715],{},[2842,4712,4714],{"href":4713},"#laravel-11---building-api-using-sanctum","Laravel 11 - Building API using Sanctum",[132,4716,4717,4722,4728,4734,4740,4746,4752,4758,4764,4770],{},[135,4718,4719],{},[2842,4720,4706],{"href":4721},"#table-of-contents",[135,4723,4724],{},[2842,4725,4727],{"href":4726},"#step-1-install-laravel-11","Step 1: Install Laravel 11",[135,4729,4730],{},[2842,4731,4733],{"href":4732},"#step-2-install-sanctum-api","Step 2: Install Sanctum API",[135,4735,4736],{},[2842,4737,4739],{"href":4738},"#step-3-sanctum-configuration","Step 3: Sanctum Configuration",[135,4741,4742],{},[2842,4743,4745],{"href":4744},"#step-4-add-blog-migration-and-model","Step 4: Add Blog Migration and Model",[135,4747,4748],{},[2842,4749,4751],{"href":4750},"#step-5-create-eloquent-api-resources","Step 5: Create Eloquent API Resources",[135,4753,4754],{},[2842,4755,4757],{"href":4756},"#step-6-create-controller-files","Step 6: Create Controller Files",[135,4759,4760],{},[2842,4761,4763],{"href":4762},"#step-7-create-api-routes","Step 7: Create API Routes",[135,4765,4766],{},[2842,4767,4769],{"href":4768},"#step-8-run-laravel-app","Step 8: Run Laravel App",[135,4771,4772],{},[2842,4773,4775],{"href":4774},"#step-9-check-following-api","Step 9: Check following API",[145,4777,4779],{"id":4778},"الخطوة-1-تثبيت-laravel-11","الخطوة 1: تثبيت Laravel 11",[128,4781,4782],{},"قم بقتح ال terminal ثم تثبيت ال laravel كالاتي",[175,4784,4787],{"className":4785,"code":4786,"language":4014},[4012],"composer create-project laravel/laravel sanctum-api\n",[167,4788,4786],{"__ignoreMap":115},[128,4790,4791],{},"ادخل الى ملف المشروع",[175,4793,4796],{"className":4794,"code":4795,"language":4014},[4012],"cd sanctum-api\n",[167,4797,4795],{"__ignoreMap":115},[145,4799,4801],{"id":4800},"الخطوة-2-تثبيت-sanctum-api","الخطوة 2: تثبيت Sanctum API",[128,4803,4804],{},"قم بتشغيل الامر الاتي لتثبيت Sanctum مع API",[175,4806,4809],{"className":4807,"code":4808,"language":4014},[4012],"php artisan install:api\n",[167,4810,4808],{"__ignoreMap":115},[145,4812,4814],{"id":4813},"الخطوة-3-اعدادات-sanctum","الخطوة 3: اعدادات Sanctum",[128,4816,4817],{},"في app/Models/User.php, سوف نقوم باضافة HasApiTokens class of Sanctum",[175,4819,4823],{"className":4820,"code":4821,"language":4822,"meta":115,"style":115},"language-css shiki shiki-themes github-light github-dark","\u003C?php\n\nnamespace App\\Models;\n\n// use Illuminate\\Contracts\\Auth\\MustVerifyEmail;\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Illuminate\\Notifications\\Notifiable;\nuse Laravel\\Sanctum\\HasApiTokens;\n\nclass User extends Authenticatable\n{\n use HasFactory, Notifiable, HasApiTokens;\n\n /**\n * The attributes that are mass assignable.\n *\n * @var array\u003Cint, string>\n */\n protected $fillable = [\n 'name',\n 'email',\n 'password',\n ];\n\n /**\n * The attributes that should be hidden for serialization.\n *\n * @var array\u003Cint, string>\n */\n protected $hidden = [\n 'password',\n 'remember_token',\n ];\n\n /**\n * Get the attributes that should be cast.\n *\n * @return array\u003Cstring, string>\n */\n protected function casts(): array\n {\n return [\n 'email_verified_at' => 'datetime',\n 'password' => 'hashed',\n ];\n }\n}\n","css",[167,4824,4825,4830,4834,4845,4849,4877,4907,4929,4946,4964,4968,4973,4977,4997,5001,5006,5011,5016,5021,5026,5040,5050,5059,5068,5073,5077,5081,5086,5090,5094,5098,5109,5117,5132,5136,5140,5144,5149,5153,5158,5162,5174,5178,5183,5196,5208,5214,5219],{"__ignoreMap":115},[183,4826,4827],{"class":185,"line":12},[183,4828,4829],{"class":267},"\u003C?php\n",[183,4831,4832],{"class":185,"line":24},[183,4833,284],{"emptyLinePlaceholder":9},[183,4835,4836,4839,4842],{"class":185,"line":35},[183,4837,4838],{"class":267},"namespace App",[183,4840,4841],{"class":210},"\\M",[183,4843,4844],{"class":267},"odels;\n",[183,4846,4847],{"class":185,"line":47},[183,4848,284],{"emptyLinePlaceholder":9},[183,4850,4851,4854,4857,4860,4863,4866,4869,4872,4874],{"class":185,"line":58},[183,4852,4853],{"class":267},"// ",[183,4855,4856],{"class":717},"use",[183,4858,4859],{"class":267}," Illuminate",[183,4861,4862],{"class":210},"\\C",[183,4864,4865],{"class":267},"ontracts",[183,4867,4868],{"class":210},"\\A",[183,4870,4871],{"class":267},"uth",[183,4873,4841],{"class":210},[183,4875,4876],{"class":267},"ustVerifyEmail;\n",[183,4878,4879,4881,4883,4886,4889,4892,4895,4898,4901,4904],{"class":185,"line":70},[183,4880,4856],{"class":717},[183,4882,4859],{"class":267},[183,4884,4885],{"class":210},"\\Da",[183,4887,4888],{"class":267},"tabase",[183,4890,4891],{"class":210},"\\E",[183,4893,4894],{"class":267},"loquent",[183,4896,4897],{"class":210},"\\Fac",[183,4899,4900],{"class":267},"tories",[183,4902,4903],{"class":210},"\\H",[183,4905,4906],{"class":267},"asFactory;\n",[183,4908,4909,4911,4913,4916,4919,4921,4923,4926],{"class":185,"line":301},[183,4910,4856],{"class":717},[183,4912,4859],{"class":267},[183,4914,4915],{"class":210},"\\F",[183,4917,4918],{"class":267},"oundation",[183,4920,4868],{"class":210},[183,4922,4871],{"class":267},[183,4924,4925],{"class":210},"\\U",[183,4927,4928],{"class":267},"ser as Authenticatable;\n",[183,4930,4931,4933,4935,4938,4941,4943],{"class":185,"line":316},[183,4932,4856],{"class":717},[183,4934,4859],{"class":267},[183,4936,4937],{"class":210},"\\N",[183,4939,4940],{"class":267},"otifications",[183,4942,4937],{"class":210},[183,4944,4945],{"class":267},"otifiable;\n",[183,4947,4948,4950,4953,4956,4959,4961],{"class":185,"line":322},[183,4949,4856],{"class":717},[183,4951,4952],{"class":267}," Laravel",[183,4954,4955],{"class":210},"\\S",[183,4957,4958],{"class":267},"anctum",[183,4960,4903],{"class":210},[183,4962,4963],{"class":267},"asApiTokens;\n",[183,4965,4966],{"class":185,"line":347},[183,4967,284],{"emptyLinePlaceholder":9},[183,4969,4970],{"class":185,"line":367},[183,4971,4972],{"class":267},"class User extends Authenticatable\n",[183,4974,4975],{"class":185,"line":373},[183,4976,319],{"class":267},[183,4978,4979,4982,4985,4987,4990,4992,4995],{"class":185,"line":379},[183,4980,4981],{"class":210}," use",[183,4983,4984],{"class":210}," HasFactory",[183,4986,4118],{"class":267},[183,4988,4989],{"class":210},"Notifiable",[183,4991,4118],{"class":267},[183,4993,4994],{"class":210},"HasApiTokens",[183,4996,279],{"class":267},[183,4998,4999],{"class":185,"line":384},[183,5000,284],{"emptyLinePlaceholder":9},[183,5002,5003],{"class":185,"line":390},[183,5004,5005],{"class":254}," /**\n",[183,5007,5008],{"class":185,"line":410},[183,5009,5010],{"class":254}," * The attributes that are mass assignable.\n",[183,5012,5013],{"class":185,"line":415},[183,5014,5015],{"class":254}," *\n",[183,5017,5018],{"class":185,"line":432},[183,5019,5020],{"class":254}," * @var array\u003Cint, string>\n",[183,5022,5023],{"class":185,"line":450},[183,5024,5025],{"class":254}," */\n",[183,5027,5028,5031,5034,5037],{"class":185,"line":462},[183,5029,5030],{"class":210}," protected",[183,5032,5033],{"class":267}," $",[183,5035,5036],{"class":210},"fillable",[183,5038,5039],{"class":267}," = [\n",[183,5041,5042,5045,5047],{"class":185,"line":479},[183,5043,5044],{"class":267}," '",[183,5046,691],{"class":210},[183,5048,5049],{"class":267},"',\n",[183,5051,5052,5054,5057],{"class":185,"line":494},[183,5053,5044],{"class":267},[183,5055,5056],{"class":210},"email",[183,5058,5049],{"class":267},[183,5060,5061,5063,5066],{"class":185,"line":510},[183,5062,5044],{"class":267},[183,5064,5065],{"class":210},"password",[183,5067,5049],{"class":267},[183,5069,5070],{"class":185,"line":526},[183,5071,5072],{"class":267}," ];\n",[183,5074,5075],{"class":185,"line":541},[183,5076,284],{"emptyLinePlaceholder":9},[183,5078,5079],{"class":185,"line":557},[183,5080,5005],{"class":254},[183,5082,5083],{"class":185,"line":572},[183,5084,5085],{"class":254}," * The attributes that should be hidden for serialization.\n",[183,5087,5088],{"class":185,"line":588},[183,5089,5015],{"class":254},[183,5091,5092],{"class":185,"line":603},[183,5093,5020],{"class":254},[183,5095,5096],{"class":185,"line":625},[183,5097,5025],{"class":254},[183,5099,5100,5102,5104,5107],{"class":185,"line":631},[183,5101,5030],{"class":210},[183,5103,5033],{"class":267},[183,5105,5106],{"class":210},"hidden",[183,5108,5039],{"class":267},[183,5110,5111,5113,5115],{"class":185,"line":637},[183,5112,5044],{"class":267},[183,5114,5065],{"class":210},[183,5116,5049],{"class":267},[183,5118,5119,5121,5124,5127,5130],{"class":185,"line":1446},[183,5120,5044],{"class":267},[183,5122,5123],{"class":210},"remember",[183,5125,5126],{"class":267},"_",[183,5128,5129],{"class":210},"token",[183,5131,5049],{"class":267},[183,5133,5134],{"class":185,"line":1467},[183,5135,5072],{"class":267},[183,5137,5138],{"class":185,"line":1488},[183,5139,284],{"emptyLinePlaceholder":9},[183,5141,5142],{"class":185,"line":1494},[183,5143,5005],{"class":254},[183,5145,5146],{"class":185,"line":1505},[183,5147,5148],{"class":254}," * Get the attributes that should be cast.\n",[183,5150,5151],{"class":185,"line":1511},[183,5152,5015],{"class":254},[183,5154,5155],{"class":185,"line":1523},[183,5156,5157],{"class":254}," * @return array\u003Cstring, string>\n",[183,5159,5160],{"class":185,"line":1536},[183,5161,5025],{"class":254},[183,5163,5164,5166,5168,5171],{"class":185,"line":1547},[183,5165,5030],{"class":210},[183,5167,328],{"class":210},[183,5169,5170],{"class":210}," casts",[183,5172,5173],{"class":267},"(): array\n",[183,5175,5176],{"class":185,"line":1568},[183,5177,2194],{"class":267},[183,5179,5180],{"class":185,"line":1573},[183,5181,5182],{"class":267}," return [\n",[183,5184,5185,5188,5191,5194],{"class":185,"line":1579},[183,5186,5187],{"class":192}," 'email_verified_at'",[183,5189,5190],{"class":267}," => ",[183,5192,5193],{"class":192},"'datetime'",[183,5195,600],{"class":267},[183,5197,5198,5201,5203,5206],{"class":185,"line":1584},[183,5199,5200],{"class":192}," 'password'",[183,5202,5190],{"class":267},[183,5204,5205],{"class":192},"'hashed'",[183,5207,600],{"class":267},[183,5209,5211],{"class":185,"line":5210},46,[183,5212,5213],{"class":267}," ];\n",[183,5215,5217],{"class":185,"line":5216},47,[183,5218,634],{"class":267},[183,5220,5222],{"class":185,"line":5221},48,[183,5223,640],{"class":267},[145,5225,5227],{"id":5226},"الخطوة-4-اضافة-blog-migration-and-model","الخطوة 4: اضافة Blog Migration and Model",[128,5229,5230],{},"قم بتشغيل الاوامر الاتية لاضافة Blog migration and model",[175,5232,5235],{"className":5233,"code":5234,"language":4014},[4012],"php artisan make:model Blog -m\n",[167,5236,5234],{"__ignoreMap":115},[128,5238,5239],{},"بعد ذالك اذهب الى database/migrations سوف تحصل ملف migration الذي تم انشائة",[175,5241,5243],{"className":4820,"code":5242,"language":4822,"meta":115,"style":115},"\u003C?php\n\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Support\\Facades\\Schema;\n\nreturn new class extends Migration\n{\n /**\n * Run the migrations.\n */\n public function up(): void\n {\n Schema::create('blogs', function (Blueprint $table) {\n $table->id();\n $table->string('title');\n $table->longText('detail');\n $table->timestamps();\n });\n }\n\n /**\n * Reverse the migrations.\n */\n public function down(): void\n {\n Schema::dropIfExists('blogs');\n }\n};\n",[167,5244,5245,5249,5253,5273,5294,5316,5320,5325,5329,5333,5338,5342,5354,5358,5373,5389,5408,5426,5439,5444,5448,5452,5456,5461,5465,5470,5474,5486,5490],{"__ignoreMap":115},[183,5246,5247],{"class":185,"line":12},[183,5248,4829],{"class":267},[183,5250,5251],{"class":185,"line":24},[183,5252,284],{"emptyLinePlaceholder":9},[183,5254,5255,5257,5259,5261,5263,5265,5268,5270],{"class":185,"line":35},[183,5256,4856],{"class":717},[183,5258,4859],{"class":267},[183,5260,4885],{"class":210},[183,5262,4888],{"class":267},[183,5264,4841],{"class":210},[183,5266,5267],{"class":267},"igrations",[183,5269,4841],{"class":210},[183,5271,5272],{"class":267},"igration;\n",[183,5274,5275,5277,5279,5281,5283,5285,5288,5291],{"class":185,"line":47},[183,5276,4856],{"class":717},[183,5278,4859],{"class":267},[183,5280,4885],{"class":210},[183,5282,4888],{"class":267},[183,5284,4955],{"class":210},[183,5286,5287],{"class":267},"chema",[183,5289,5290],{"class":210},"\\B",[183,5292,5293],{"class":267},"lueprint;\n",[183,5295,5296,5298,5300,5302,5305,5308,5311,5313],{"class":185,"line":58},[183,5297,4856],{"class":717},[183,5299,4859],{"class":267},[183,5301,4955],{"class":210},[183,5303,5304],{"class":267},"upport",[183,5306,5307],{"class":210},"\\Facade",[183,5309,5310],{"class":267},"s",[183,5312,4955],{"class":210},[183,5314,5315],{"class":267},"chema;\n",[183,5317,5318],{"class":185,"line":70},[183,5319,284],{"emptyLinePlaceholder":9},[183,5321,5322],{"class":185,"line":301},[183,5323,5324],{"class":267},"return new class extends Migration\n",[183,5326,5327],{"class":185,"line":316},[183,5328,319],{"class":267},[183,5330,5331],{"class":185,"line":322},[183,5332,5005],{"class":254},[183,5334,5335],{"class":185,"line":347},[183,5336,5337],{"class":254}," * Run the migrations.\n",[183,5339,5340],{"class":185,"line":367},[183,5341,5025],{"class":254},[183,5343,5344,5346,5348,5351],{"class":185,"line":373},[183,5345,2181],{"class":210},[183,5347,328],{"class":210},[183,5349,5350],{"class":210}," up",[183,5352,5353],{"class":267},"(): void\n",[183,5355,5356],{"class":185,"line":379},[183,5357,2194],{"class":267},[183,5359,5360,5363,5366,5369,5371],{"class":185,"line":384},[183,5361,5362],{"class":267}," Schema::create(",[183,5364,5365],{"class":192},"'blogs'",[183,5367,5368],{"class":267},", function (Blueprint $",[183,5370,1933],{"class":210},[183,5372,1220],{"class":267},[183,5374,5375,5378,5381,5384,5387],{"class":185,"line":390},[183,5376,5377],{"class":267}," $",[183,5379,5380],{"class":210},"table-",[183,5382,5383],{"class":267},">",[183,5385,5386],{"class":210},"id",[183,5388,364],{"class":267},[183,5390,5391,5393,5395,5397,5400,5403,5405],{"class":185,"line":410},[183,5392,5377],{"class":267},[183,5394,5380],{"class":210},[183,5396,5383],{"class":267},[183,5398,5399],{"class":210},"string",[183,5401,5402],{"class":267},"('",[183,5404,108],{"class":210},[183,5406,5407],{"class":267},"');\n",[183,5409,5410,5412,5414,5416,5419,5421,5424],{"class":185,"line":415},[183,5411,5377],{"class":267},[183,5413,5380],{"class":210},[183,5415,5383],{"class":267},[183,5417,5418],{"class":210},"longText",[183,5420,5402],{"class":267},[183,5422,5423],{"class":210},"detail",[183,5425,5407],{"class":267},[183,5427,5428,5430,5432,5434,5437],{"class":185,"line":432},[183,5429,5377],{"class":267},[183,5431,5380],{"class":210},[183,5433,5383],{"class":267},[183,5435,5436],{"class":210},"timestamps",[183,5438,364],{"class":267},[183,5440,5441],{"class":185,"line":450},[183,5442,5443],{"class":267}," });\n",[183,5445,5446],{"class":185,"line":462},[183,5447,634],{"class":267},[183,5449,5450],{"class":185,"line":479},[183,5451,284],{"emptyLinePlaceholder":9},[183,5453,5454],{"class":185,"line":494},[183,5455,5005],{"class":254},[183,5457,5458],{"class":185,"line":510},[183,5459,5460],{"class":254}," * Reverse the migrations.\n",[183,5462,5463],{"class":185,"line":526},[183,5464,5025],{"class":254},[183,5466,5467],{"class":185,"line":541},[183,5468,5469],{"class":267}," public function down(): void\n",[183,5471,5472],{"class":185,"line":557},[183,5473,2194],{"class":267},[183,5475,5476,5479,5482,5484],{"class":185,"line":572},[183,5477,5478],{"class":210}," Schema",[183,5480,5481],{"class":267},"::dropIfExists(",[183,5483,5365],{"class":192},[183,5485,698],{"class":267},[183,5487,5488],{"class":185,"line":588},[183,5489,634],{"class":267},[183,5491,5492],{"class":185,"line":603},[183,5493,2757],{"class":267},[128,5495,5496],{},"ثم اذهب الى app/Models/Blog.php",[175,5498,5500],{"className":4820,"code":5499,"language":4822,"meta":115,"style":115},"\u003C?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Factories\\HasFactory;\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Blog extends Model\n{\n use HasFactory;\n\n protected $fillable = [\n 'title', 'detail'\n ];\n}\n",[167,5501,5502,5506,5510,5518,5522,5544,5563,5567,5572,5576,5584,5588,5598,5612,5616],{"__ignoreMap":115},[183,5503,5504],{"class":185,"line":12},[183,5505,4829],{"class":267},[183,5507,5508],{"class":185,"line":24},[183,5509,284],{"emptyLinePlaceholder":9},[183,5511,5512,5514,5516],{"class":185,"line":35},[183,5513,4838],{"class":267},[183,5515,4841],{"class":210},[183,5517,4844],{"class":267},[183,5519,5520],{"class":185,"line":47},[183,5521,284],{"emptyLinePlaceholder":9},[183,5523,5524,5526,5528,5530,5532,5534,5536,5538,5540,5542],{"class":185,"line":58},[183,5525,4856],{"class":717},[183,5527,4859],{"class":267},[183,5529,4885],{"class":210},[183,5531,4888],{"class":267},[183,5533,4891],{"class":210},[183,5535,4894],{"class":267},[183,5537,4897],{"class":210},[183,5539,4900],{"class":267},[183,5541,4903],{"class":210},[183,5543,4906],{"class":267},[183,5545,5546,5548,5550,5552,5554,5556,5558,5560],{"class":185,"line":70},[183,5547,4856],{"class":717},[183,5549,4859],{"class":267},[183,5551,4885],{"class":210},[183,5553,4888],{"class":267},[183,5555,4891],{"class":210},[183,5557,4894],{"class":267},[183,5559,4841],{"class":210},[183,5561,5562],{"class":267},"odel;\n",[183,5564,5565],{"class":185,"line":301},[183,5566,284],{"emptyLinePlaceholder":9},[183,5568,5569],{"class":185,"line":316},[183,5570,5571],{"class":267},"class Blog extends Model\n",[183,5573,5574],{"class":185,"line":322},[183,5575,319],{"class":267},[183,5577,5578,5580,5582],{"class":185,"line":347},[183,5579,4981],{"class":210},[183,5581,4984],{"class":210},[183,5583,279],{"class":267},[183,5585,5586],{"class":185,"line":367},[183,5587,284],{"emptyLinePlaceholder":9},[183,5589,5590,5592,5594,5596],{"class":185,"line":373},[183,5591,5030],{"class":210},[183,5593,5033],{"class":267},[183,5595,5036],{"class":210},[183,5597,5039],{"class":267},[183,5599,5600,5602,5604,5607,5609],{"class":185,"line":379},[183,5601,5044],{"class":267},[183,5603,108],{"class":210},[183,5605,5606],{"class":267},"', '",[183,5608,5423],{"class":210},[183,5610,5611],{"class":267},"'\n",[183,5613,5614],{"class":185,"line":384},[183,5615,5072],{"class":267},[183,5617,5618],{"class":185,"line":390},[183,5619,640],{"class":267},[145,5621,5623],{"id":5622},"الخطوة-5-انشاء-eloquent-api-resources","الخطوة 5: انشاء Eloquent API Resources",[128,5625,5626],{},"قم بتشغيل الامر الاتي لانشاء Blog API Resources",[175,5628,5631],{"className":5629,"code":5630,"language":4014},[4012],"php artisan make:resource BlogResource\n",[167,5632,5630],{"__ignoreMap":115},[128,5634,5635],{},"ثم اذهب الى app/Http/Resources/BlogResource.php",[175,5637,5639],{"className":4820,"code":5638,"language":4822,"meta":115,"style":115},"\u003C?php\n\nnamespace App\\Http\\Resources;\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Http\\Resources\\Json\\JsonResource;\n\nclass BlogResource extends JsonResource\n{\n // Transform the resource into an array.\n public function toArray(Request $request): array\n {\n return [\n 'id' => $this->id,\n 'title' => $this->title,\n 'detail' => $this->detail,\n 'created_at' => $this->created_at->format('d/m/Y'),\n 'updated_at' => $this->updated_at->format('d/m/Y'),\n ];\n }\n}\n",[167,5640,5641,5645,5649,5664,5668,5683,5709,5713,5718,5722,5748,5769,5773,5777,5785,5793,5801,5819,5835,5839,5843],{"__ignoreMap":115},[183,5642,5643],{"class":185,"line":12},[183,5644,4829],{"class":267},[183,5646,5647],{"class":185,"line":24},[183,5648,284],{"emptyLinePlaceholder":9},[183,5650,5651,5653,5655,5658,5661],{"class":185,"line":35},[183,5652,4838],{"class":267},[183,5654,4903],{"class":210},[183,5656,5657],{"class":267},"ttp",[183,5659,5660],{"class":210},"\\R",[183,5662,5663],{"class":267},"esources;\n",[183,5665,5666],{"class":185,"line":47},[183,5667,284],{"emptyLinePlaceholder":9},[183,5669,5670,5672,5674,5676,5678,5680],{"class":185,"line":58},[183,5671,4856],{"class":717},[183,5673,4859],{"class":267},[183,5675,4903],{"class":210},[183,5677,5657],{"class":267},[183,5679,5660],{"class":210},[183,5681,5682],{"class":267},"equest;\n",[183,5684,5685,5687,5689,5691,5693,5695,5698,5701,5704,5706],{"class":185,"line":70},[183,5686,4856],{"class":717},[183,5688,4859],{"class":267},[183,5690,4903],{"class":210},[183,5692,5657],{"class":267},[183,5694,5660],{"class":210},[183,5696,5697],{"class":267},"esources",[183,5699,5700],{"class":210},"\\J",[183,5702,5703],{"class":267},"son",[183,5705,5700],{"class":210},[183,5707,5708],{"class":267},"sonResource;\n",[183,5710,5711],{"class":185,"line":301},[183,5712,284],{"emptyLinePlaceholder":9},[183,5714,5715],{"class":185,"line":316},[183,5716,5717],{"class":267},"class BlogResource extends JsonResource\n",[183,5719,5720],{"class":185,"line":322},[183,5721,319],{"class":267},[183,5723,5724,5727,5730,5733,5736,5739,5742,5745],{"class":185,"line":347},[183,5725,5726],{"class":267}," // ",[183,5728,5729],{"class":210},"Transform",[183,5731,5732],{"class":210}," the",[183,5734,5735],{"class":210}," resource",[183,5737,5738],{"class":210}," into",[183,5740,5741],{"class":210}," an",[183,5743,5744],{"class":210}," array",[183,5746,5747],{"class":267},".\n",[183,5749,5750,5752,5754,5757,5759,5761,5763,5766],{"class":185,"line":367},[183,5751,2181],{"class":210},[183,5753,328],{"class":210},[183,5755,5756],{"class":210}," toArray",[183,5758,334],{"class":267},[183,5760,338],{"class":210},[183,5762,5033],{"class":267},[183,5764,5765],{"class":210},"request",[183,5767,5768],{"class":267},"): array\n",[183,5770,5771],{"class":185,"line":373},[183,5772,2194],{"class":267},[183,5774,5775],{"class":185,"line":379},[183,5776,5182],{"class":267},[183,5778,5779,5782],{"class":185,"line":384},[183,5780,5781],{"class":192}," 'id'",[183,5783,5784],{"class":267}," => $this->id,\n",[183,5786,5787,5790],{"class":185,"line":390},[183,5788,5789],{"class":192}," 'title'",[183,5791,5792],{"class":267}," => $this->title,\n",[183,5794,5795,5798],{"class":185,"line":410},[183,5796,5797],{"class":192}," 'detail'",[183,5799,5800],{"class":267}," => $this->detail,\n",[183,5802,5803,5806,5809,5812,5814,5817],{"class":185,"line":415},[183,5804,5805],{"class":192}," 'created_at'",[183,5807,5808],{"class":267}," => $this->created_at->",[183,5810,5811],{"class":210},"format",[183,5813,334],{"class":267},[183,5815,5816],{"class":192},"'d/m/Y'",[183,5818,1323],{"class":267},[183,5820,5821,5824,5827,5829,5831,5833],{"class":185,"line":432},[183,5822,5823],{"class":192}," 'updated_at'",[183,5825,5826],{"class":267}," => $this->updated_at->",[183,5828,5811],{"class":210},[183,5830,334],{"class":267},[183,5832,5816],{"class":192},[183,5834,1323],{"class":267},[183,5836,5837],{"class":185,"line":450},[183,5838,5213],{"class":267},[183,5840,5841],{"class":185,"line":462},[183,5842,634],{"class":267},[183,5844,5845],{"class":185,"line":479},[183,5846,640],{"class":267},[145,5848,5850],{"id":5849},"الخطوة-6-انشاء-ملف-controller","الخطوة 6: انشاء ملف Controller",[128,5852,5853],{},"قم بتشغيل الاوامر الاتية لانشاء BaseController & RegisterController & BlogController",[175,5855,5858],{"className":5856,"code":5857,"language":4014},[4012],"php artisan make:controller API/BaseController\nphp artisan make:controller API/RegisterController\nphp artisan make:controller API/BlogController\n",[167,5859,5857],{"__ignoreMap":115},[128,5861,5862],{},"اذهب الى app/Http/Controllers/API/BaseController.php",[175,5864,5866],{"className":4820,"code":5865,"language":4822,"meta":115,"style":115},"\u003C?php\n\nnamespace App\\Http\\Controllers\\API;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\n\nclass BaseController extends Controller\n{\n // success response method\n public function sendResponse($result, $message)\n {\n $response = [\n 'success' => true,\n 'data' => $result,\n 'message' => $message,\n ];\n\n return response()->json($response, 200);\n }\n\n // return error response\n public function sendError($error, $errorMessages = [], $code = 404)\n {\n $response = [\n 'success' => false,\n 'message' => $error,\n ];\n\n if(!empty($errorMessages)){\n $response['data'] = $errorMessages;\n }\n\n return response()->json($response, $code);\n }\n}\n",[167,5867,5868,5872,5876,5894,5898,5917,5931,5935,5940,5944,5957,5980,5984,5994,6009,6023,6036,6040,6044,6067,6071,6075,6080,6090,6094,6102,6115,6128,6132,6136,6155,6173,6177,6181,6195,6199],{"__ignoreMap":115},[183,5869,5870],{"class":185,"line":12},[183,5871,4829],{"class":267},[183,5873,5874],{"class":185,"line":24},[183,5875,284],{"emptyLinePlaceholder":9},[183,5877,5878,5880,5882,5884,5886,5889,5891],{"class":185,"line":35},[183,5879,4838],{"class":267},[183,5881,4903],{"class":210},[183,5883,5657],{"class":267},[183,5885,4862],{"class":210},[183,5887,5888],{"class":267},"ontrollers",[183,5890,4868],{"class":210},[183,5892,5893],{"class":267},"PI;\n",[183,5895,5896],{"class":185,"line":47},[183,5897,284],{"emptyLinePlaceholder":9},[183,5899,5900,5902,5904,5906,5908,5910,5912,5914],{"class":185,"line":58},[183,5901,4856],{"class":717},[183,5903,264],{"class":267},[183,5905,4903],{"class":210},[183,5907,5657],{"class":267},[183,5909,4862],{"class":210},[183,5911,5888],{"class":267},[183,5913,4862],{"class":210},[183,5915,5916],{"class":267},"ontroller;\n",[183,5918,5919,5921,5923,5925,5927,5929],{"class":185,"line":70},[183,5920,4856],{"class":717},[183,5922,4859],{"class":267},[183,5924,4903],{"class":210},[183,5926,5657],{"class":267},[183,5928,5660],{"class":210},[183,5930,5682],{"class":267},[183,5932,5933],{"class":185,"line":301},[183,5934,284],{"emptyLinePlaceholder":9},[183,5936,5937],{"class":185,"line":316},[183,5938,5939],{"class":267},"class BaseController extends Controller\n",[183,5941,5942],{"class":185,"line":322},[183,5943,319],{"class":267},[183,5945,5946,5948,5951,5954],{"class":185,"line":347},[183,5947,5726],{"class":267},[183,5949,5950],{"class":210},"success",[183,5952,5953],{"class":210}," response",[183,5955,5956],{"class":210}," method\n",[183,5958,5959,5961,5963,5966,5969,5972,5975,5978],{"class":185,"line":367},[183,5960,2181],{"class":210},[183,5962,328],{"class":210},[183,5964,5965],{"class":210}," sendResponse",[183,5967,5968],{"class":267},"($",[183,5970,5971],{"class":210},"result",[183,5973,5974],{"class":267},", $",[183,5976,5977],{"class":210},"message",[183,5979,3417],{"class":267},[183,5981,5982],{"class":185,"line":373},[183,5983,2194],{"class":267},[183,5985,5986,5989,5992],{"class":185,"line":379},[183,5987,5988],{"class":267}," $",[183,5990,5991],{"class":210},"response",[183,5993,5039],{"class":267},[183,5995,5996,5999,6001,6004,6007],{"class":185,"line":384},[183,5997,5998],{"class":267}," '",[183,6000,5950],{"class":210},[183,6002,6003],{"class":267},"' => ",[183,6005,6006],{"class":210},"true",[183,6008,600],{"class":267},[183,6010,6011,6013,6016,6019,6021],{"class":185,"line":390},[183,6012,5998],{"class":267},[183,6014,6015],{"class":210},"data",[183,6017,6018],{"class":267},"' => $",[183,6020,5971],{"class":210},[183,6022,600],{"class":267},[183,6024,6025,6027,6029,6032,6034],{"class":185,"line":410},[183,6026,5998],{"class":267},[183,6028,5977],{"class":210},[183,6030,6031],{"class":267},"' => $",[183,6033,5977],{"class":210},[183,6035,600],{"class":267},[183,6037,6038],{"class":185,"line":415},[183,6039,5213],{"class":267},[183,6041,6042],{"class":185,"line":432},[183,6043,284],{"emptyLinePlaceholder":9},[183,6045,6046,6048,6050,6053,6056,6058,6060,6062,6064],{"class":185,"line":450},[183,6047,418],{"class":210},[183,6049,5953],{"class":210},[183,6051,6052],{"class":267},"()",[183,6054,6055],{"class":210},"-",[183,6057,5383],{"class":267},[183,6059,8],{"class":210},[183,6061,5968],{"class":267},[183,6063,5991],{"class":210},[183,6065,6066],{"class":267},", 200);\n",[183,6068,6069],{"class":185,"line":462},[183,6070,634],{"class":267},[183,6072,6073],{"class":185,"line":479},[183,6074,284],{"emptyLinePlaceholder":9},[183,6076,6077],{"class":185,"line":494},[183,6078,6079],{"class":267}," // return error response\n",[183,6081,6082,6085,6087],{"class":185,"line":510},[183,6083,6084],{"class":267}," public function sendError($error, $errorMessages = [], $",[183,6086,167],{"class":717},[183,6088,6089],{"class":267}," = 404)\n",[183,6091,6092],{"class":185,"line":526},[183,6093,2194],{"class":267},[183,6095,6096,6098,6100],{"class":185,"line":541},[183,6097,5988],{"class":267},[183,6099,5991],{"class":210},[183,6101,5039],{"class":267},[183,6103,6104,6106,6108,6110,6113],{"class":185,"line":557},[183,6105,5998],{"class":267},[183,6107,5950],{"class":210},[183,6109,6003],{"class":267},[183,6111,6112],{"class":210},"false",[183,6114,600],{"class":267},[183,6116,6117,6119,6121,6123,6126],{"class":185,"line":572},[183,6118,5998],{"class":267},[183,6120,5977],{"class":210},[183,6122,6031],{"class":267},[183,6124,6125],{"class":210},"error",[183,6127,600],{"class":267},[183,6129,6130],{"class":185,"line":588},[183,6131,5213],{"class":267},[183,6133,6134],{"class":185,"line":603},[183,6135,284],{"emptyLinePlaceholder":9},[183,6137,6138,6141,6144,6147,6149,6152],{"class":185,"line":625},[183,6139,6140],{"class":210}," if",[183,6142,6143],{"class":267},"(!",[183,6145,6146],{"class":210},"empty",[183,6148,5968],{"class":267},[183,6150,6151],{"class":210},"errorMessages",[183,6153,6154],{"class":267},")){\n",[183,6156,6157,6159,6161,6164,6166,6169,6171],{"class":185,"line":631},[183,6158,5377],{"class":267},[183,6160,5991],{"class":210},[183,6162,6163],{"class":267},"['",[183,6165,6015],{"class":210},[183,6167,6168],{"class":267},"'] = $",[183,6170,6151],{"class":210},[183,6172,279],{"class":267},[183,6174,6175],{"class":185,"line":637},[183,6176,1576],{"class":267},[183,6178,6179],{"class":185,"line":1446},[183,6180,284],{"emptyLinePlaceholder":9},[183,6182,6183,6186,6188,6191,6193],{"class":185,"line":1467},[183,6184,6185],{"class":267}," return response()-",[183,6187,5383],{"class":260},[183,6189,6190],{"class":267},"json($response, $",[183,6192,167],{"class":717},[183,6194,698],{"class":267},[183,6196,6197],{"class":185,"line":1488},[183,6198,634],{"class":267},[183,6200,6201],{"class":185,"line":1494},[183,6202,640],{"class":267},[128,6204,6205],{},"ثم اذهب الى app/Http/Controllers/API/BaseController.php",[175,6207,6209],{"className":4820,"code":6208,"language":4822,"meta":115,"style":115},"\u003C?php\n\nnamespace App\\Http\\Controllers\\API;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Models\\User;\nuse Illuminate\\Support\\Facades\\Auth;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Support\\Facades\\Validator;\n\nclass RegisterController extends BaseController\n{\n // Register api\n public function register(Request $request): JsonResponse\n {\n $validator = Validator::make($request->all(), [\n 'name' => 'required',\n 'email' => 'required|email',\n 'password' => 'required',\n 'c_password' => 'required|same:password',\n ]);\n\n if($validator->fails()){\n return $this->sendError('Validation Error.', $validator->errors());\n }\n\n $input = $request->all();\n $input['password'] = bcrypt($input['password']);\n $user = User::create($input);\n $success['token'] = $user->createToken('MyApp')->plainTextToken;\n $success['name'] = $user->name;\n\n return $this->sendResponse($success, 'User register successfully.');\n }\n\n // Login api\n public function login(Request $request): JsonResponse\n {\n if(Auth::attempt(['email' => $request->email, 'password' => $request->password])){\n $user = Auth::user();\n $success['token'] = $user->createToken('MyApp')->plainTextToken;\n $success['name'] = $user->name;\n\n return $this->sendResponse($success, 'User login successfully.');\n }\n else{\n return $this->sendError('Unauthorised.', ['error'=>'Unauthorised']);\n }\n }\n}\n",[167,6210,6211,6215,6219,6235,6239,6257,6271,6287,6306,6321,6341,6345,6350,6354,6364,6383,6387,6397,6411,6428,6440,6469,6473,6477,6494,6529,6533,6537,6555,6579,6588,6612,6628,6632,6644,6648,6652,6657,6662,6666,6689,6704,6741,6761,6765,6797,6801,6806,6836,6841,6846],{"__ignoreMap":115},[183,6212,6213],{"class":185,"line":12},[183,6214,4829],{"class":267},[183,6216,6217],{"class":185,"line":24},[183,6218,284],{"emptyLinePlaceholder":9},[183,6220,6221,6223,6225,6227,6229,6231,6233],{"class":185,"line":35},[183,6222,4838],{"class":267},[183,6224,4903],{"class":210},[183,6226,5657],{"class":267},[183,6228,4862],{"class":210},[183,6230,5888],{"class":267},[183,6232,4868],{"class":210},[183,6234,5893],{"class":267},[183,6236,6237],{"class":185,"line":47},[183,6238,284],{"emptyLinePlaceholder":9},[183,6240,6241,6243,6245,6247,6249,6251,6253,6255],{"class":185,"line":58},[183,6242,4856],{"class":717},[183,6244,264],{"class":267},[183,6246,4903],{"class":210},[183,6248,5657],{"class":267},[183,6250,4862],{"class":210},[183,6252,5888],{"class":267},[183,6254,4862],{"class":210},[183,6256,5916],{"class":267},[183,6258,6259,6261,6263,6265,6267,6269],{"class":185,"line":70},[183,6260,4856],{"class":717},[183,6262,4859],{"class":267},[183,6264,4903],{"class":210},[183,6266,5657],{"class":267},[183,6268,5660],{"class":210},[183,6270,5682],{"class":267},[183,6272,6273,6275,6277,6279,6282,6284],{"class":185,"line":301},[183,6274,4856],{"class":717},[183,6276,264],{"class":267},[183,6278,4841],{"class":210},[183,6280,6281],{"class":267},"odels",[183,6283,4925],{"class":210},[183,6285,6286],{"class":267},"ser;\n",[183,6288,6289,6291,6293,6295,6297,6299,6301,6303],{"class":185,"line":316},[183,6290,4856],{"class":717},[183,6292,4859],{"class":267},[183,6294,4955],{"class":210},[183,6296,5304],{"class":267},[183,6298,5307],{"class":210},[183,6300,5310],{"class":267},[183,6302,4868],{"class":210},[183,6304,6305],{"class":267},"uth;\n",[183,6307,6308,6310,6312,6314,6316,6318],{"class":185,"line":322},[183,6309,4856],{"class":717},[183,6311,4859],{"class":267},[183,6313,4903],{"class":210},[183,6315,5657],{"class":267},[183,6317,5700],{"class":210},[183,6319,6320],{"class":267},"sonResponse;\n",[183,6322,6323,6325,6327,6329,6331,6333,6335,6338],{"class":185,"line":347},[183,6324,4856],{"class":717},[183,6326,4859],{"class":267},[183,6328,4955],{"class":210},[183,6330,5304],{"class":267},[183,6332,5307],{"class":210},[183,6334,5310],{"class":267},[183,6336,6337],{"class":210},"\\V",[183,6339,6340],{"class":267},"alidator;\n",[183,6342,6343],{"class":185,"line":367},[183,6344,284],{"emptyLinePlaceholder":9},[183,6346,6347],{"class":185,"line":373},[183,6348,6349],{"class":267},"class RegisterController extends BaseController\n",[183,6351,6352],{"class":185,"line":379},[183,6353,319],{"class":267},[183,6355,6356,6358,6361],{"class":185,"line":384},[183,6357,5726],{"class":267},[183,6359,6360],{"class":210},"Register",[183,6362,6363],{"class":210}," api\n",[183,6365,6366,6368,6370,6372,6374,6376,6378,6380],{"class":185,"line":390},[183,6367,2181],{"class":210},[183,6369,328],{"class":210},[183,6371,3408],{"class":210},[183,6373,334],{"class":267},[183,6375,338],{"class":210},[183,6377,5033],{"class":267},[183,6379,5765],{"class":210},[183,6381,6382],{"class":267},"): JsonResponse\n",[183,6384,6385],{"class":185,"line":410},[183,6386,2194],{"class":267},[183,6388,6389,6392,6394],{"class":185,"line":415},[183,6390,6391],{"class":267}," $validator = Validator::make($request->",[183,6393,2258],{"class":210},[183,6395,6396],{"class":267},"(), [\n",[183,6398,6399,6401,6403,6406,6409],{"class":185,"line":432},[183,6400,5998],{"class":267},[183,6402,691],{"class":210},[183,6404,6405],{"class":267},"' => '",[183,6407,6408],{"class":210},"required",[183,6410,5049],{"class":267},[183,6412,6413,6415,6417,6419,6421,6424,6426],{"class":185,"line":450},[183,6414,5998],{"class":267},[183,6416,5056],{"class":210},[183,6418,6405],{"class":267},[183,6420,6408],{"class":210},[183,6422,6423],{"class":267},"|",[183,6425,5056],{"class":210},[183,6427,5049],{"class":267},[183,6429,6430,6432,6434,6436,6438],{"class":185,"line":462},[183,6431,5998],{"class":267},[183,6433,5065],{"class":210},[183,6435,6405],{"class":267},[183,6437,6408],{"class":210},[183,6439,5049],{"class":267},[183,6441,6442,6444,6447,6449,6451,6453,6455,6457,6460,6463,6466],{"class":185,"line":479},[183,6443,5998],{"class":267},[183,6445,6446],{"class":210},"c",[183,6448,5126],{"class":267},[183,6450,5065],{"class":210},[183,6452,6405],{"class":267},[183,6454,6408],{"class":210},[183,6456,6423],{"class":267},[183,6458,6459],{"class":210},"same",[183,6461,6462],{"class":267},":password",[183,6464,6465],{"class":192},"'",[183,6467,600],{"class":6468},"s7hpK",[183,6470,6471],{"class":185,"line":494},[183,6472,628],{"class":267},[183,6474,6475],{"class":185,"line":510},[183,6476,284],{"emptyLinePlaceholder":9},[183,6478,6479,6481,6483,6486,6488,6491],{"class":185,"line":526},[183,6480,6140],{"class":210},[183,6482,5968],{"class":267},[183,6484,6485],{"class":210},"validator-",[183,6487,5383],{"class":267},[183,6489,6490],{"class":210},"fails",[183,6492,6493],{"class":267},"()){\n",[183,6495,6496,6498,6500,6503,6505,6508,6510,6513,6516,6519,6521,6523,6526],{"class":185,"line":541},[183,6497,1276],{"class":210},[183,6499,5033],{"class":267},[183,6501,6502],{"class":210},"this-",[183,6504,5383],{"class":267},[183,6506,6507],{"class":210},"sendError",[183,6509,5402],{"class":267},[183,6511,6512],{"class":210},"Validation",[183,6514,6515],{"class":210}," Error",[183,6517,6518],{"class":267},".', $",[183,6520,6485],{"class":210},[183,6522,5383],{"class":267},[183,6524,6525],{"class":210},"errors",[183,6527,6528],{"class":267},"());\n",[183,6530,6531],{"class":185,"line":557},[183,6532,1576],{"class":267},[183,6534,6535],{"class":185,"line":572},[183,6536,284],{"emptyLinePlaceholder":9},[183,6538,6539,6541,6544,6547,6550,6552],{"class":185,"line":588},[183,6540,5988],{"class":267},[183,6542,6543],{"class":717},"input",[183,6545,6546],{"class":267}," = $",[183,6548,6549],{"class":717},"request-",[183,6551,5383],{"class":260},[183,6553,6554],{"class":267},"all();\n",[183,6556,6557,6559,6561,6564,6567,6570,6572,6574,6576],{"class":185,"line":603},[183,6558,5988],{"class":267},[183,6560,6543],{"class":717},[183,6562,6563],{"class":267},"[",[183,6565,6566],{"class":192},"'password'",[183,6568,6569],{"class":267},"] = bcrypt($",[183,6571,6543],{"class":717},[183,6573,6563],{"class":267},[183,6575,6566],{"class":192},[183,6577,6578],{"class":267},"]);\n",[183,6580,6581,6584,6586],{"class":185,"line":625},[183,6582,6583],{"class":267}," $user = User::create($",[183,6585,6543],{"class":717},[183,6587,698],{"class":267},[183,6589,6590,6593,6596,6599,6602,6604,6607,6609],{"class":185,"line":631},[183,6591,6592],{"class":267}," $success[",[183,6594,6595],{"class":192},"'token'",[183,6597,6598],{"class":267},"] = $",[183,6600,6601],{"class":717},"user-",[183,6603,5383],{"class":260},[183,6605,6606],{"class":267},"createToken('MyApp')-",[183,6608,5383],{"class":260},[183,6610,6611],{"class":267},"plainTextToken;\n",[183,6613,6614,6616,6619,6621,6623,6625],{"class":185,"line":637},[183,6615,6592],{"class":267},[183,6617,6618],{"class":192},"'name'",[183,6620,6598],{"class":267},[183,6622,6601],{"class":717},[183,6624,5383],{"class":260},[183,6626,6627],{"class":267},"name;\n",[183,6629,6630],{"class":185,"line":1446},[183,6631,284],{"emptyLinePlaceholder":9},[183,6633,6634,6637,6639,6641],{"class":185,"line":1467},[183,6635,6636],{"class":267}," return $",[183,6638,6502],{"class":717},[183,6640,5383],{"class":260},[183,6642,6643],{"class":267},"sendResponse($success, 'User register successfully.');\n",[183,6645,6646],{"class":185,"line":1488},[183,6647,634],{"class":267},[183,6649,6650],{"class":185,"line":1494},[183,6651,284],{"emptyLinePlaceholder":9},[183,6653,6654],{"class":185,"line":1505},[183,6655,6656],{"class":267}," // Login api\n",[183,6658,6659],{"class":185,"line":1511},[183,6660,6661],{"class":267}," public function login(Request $request): JsonResponse\n",[183,6663,6664],{"class":185,"line":1523},[183,6665,2194],{"class":267},[183,6667,6668,6670,6672,6675,6678,6681,6684,6686],{"class":185,"line":1536},[183,6669,6140],{"class":210},[183,6671,334],{"class":267},[183,6673,6674],{"class":210},"Auth",[183,6676,6677],{"class":267},"::attempt([",[183,6679,6680],{"class":192},"'email'",[183,6682,6683],{"class":267}," => $request->email, ",[183,6685,6566],{"class":192},[183,6687,6688],{"class":267}," => $request->password])){\n",[183,6690,6691,6693,6696,6699,6701],{"class":185,"line":1547},[183,6692,5377],{"class":267},[183,6694,6695],{"class":210},"user",[183,6697,6698],{"class":267}," = ",[183,6700,6674],{"class":210},[183,6702,6703],{"class":267},"::user();\n",[183,6705,6706,6708,6710,6712,6714,6717,6719,6721,6724,6726,6729,6732,6734,6736,6739],{"class":185,"line":1568},[183,6707,5377],{"class":267},[183,6709,5950],{"class":210},[183,6711,6163],{"class":267},[183,6713,5129],{"class":210},[183,6715,6716],{"class":267},"'] = $",[183,6718,6601],{"class":210},[183,6720,5383],{"class":267},[183,6722,6723],{"class":210},"createToken",[183,6725,5402],{"class":267},[183,6727,6728],{"class":210},"MyApp",[183,6730,6731],{"class":267},"')",[183,6733,6055],{"class":210},[183,6735,5383],{"class":267},[183,6737,6738],{"class":210},"plainTextToken",[183,6740,279],{"class":267},[183,6742,6743,6745,6747,6749,6751,6753,6755,6757,6759],{"class":185,"line":1573},[183,6744,5377],{"class":267},[183,6746,5950],{"class":210},[183,6748,6163],{"class":267},[183,6750,691],{"class":210},[183,6752,6716],{"class":267},[183,6754,6601],{"class":210},[183,6756,5383],{"class":267},[183,6758,691],{"class":210},[183,6760,279],{"class":267},[183,6762,6763],{"class":185,"line":1579},[183,6764,284],{"emptyLinePlaceholder":9},[183,6766,6767,6769,6771,6773,6775,6778,6780,6782,6785,6788,6791,6794],{"class":185,"line":1584},[183,6768,1276],{"class":210},[183,6770,5033],{"class":267},[183,6772,6502],{"class":210},[183,6774,5383],{"class":267},[183,6776,6777],{"class":210},"sendResponse",[183,6779,5968],{"class":267},[183,6781,5950],{"class":210},[183,6783,6784],{"class":267},", '",[183,6786,6787],{"class":210},"User",[183,6789,6790],{"class":210}," login",[183,6792,6793],{"class":210}," successfully",[183,6795,6796],{"class":267},".');\n",[183,6798,6799],{"class":185,"line":5210},[183,6800,1576],{"class":267},[183,6802,6803],{"class":185,"line":5216},[183,6804,6805],{"class":267}," else{\n",[183,6807,6808,6810,6812,6814,6816,6818,6820,6823,6826,6828,6831,6833],{"class":185,"line":5221},[183,6809,1276],{"class":210},[183,6811,5033],{"class":267},[183,6813,6502],{"class":210},[183,6815,5383],{"class":267},[183,6817,6507],{"class":210},[183,6819,5402],{"class":267},[183,6821,6822],{"class":210},"Unauthorised",[183,6824,6825],{"class":267},".', ['",[183,6827,6125],{"class":210},[183,6829,6830],{"class":267},"'=>'",[183,6832,6822],{"class":210},[183,6834,6835],{"class":267},"']);\n",[183,6837,6839],{"class":185,"line":6838},49,[183,6840,1576],{"class":267},[183,6842,6844],{"class":185,"line":6843},50,[183,6845,634],{"class":267},[183,6847,6849],{"class":185,"line":6848},51,[183,6850,640],{"class":267},[128,6852,6853],{},"اخيراً اذهب الى app/Http/Controllers/API/BlogController.php",[175,6855,6857],{"className":4820,"code":6856,"language":4822,"meta":115,"style":115},"\u003C?php\n\nnamespace App\\Http\\Controllers\\API;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\API\\BaseController;\nuse App\\Models\\Blog;\nuse App\\Http\\Resources\\BlogResource;\nuse Illuminate\\Http\\JsonResponse;\nuse Illuminate\\Support\\Facades\\Validator;\n\nclass BlogController extends BaseController\n{\n // Display a listing of the resource.\n public function index(): JsonResponse\n {\n $blogs = Blog::all();\n\n return $this->sendResponse(BlogResource::collection($blogs), 'Blogs retrieved successfully.');\n }\n\n // Store a newly created resource in storage.\n public function store(Request $request): JsonResponse\n {\n $input = $request->all();\n\n $validator = Validator::make($input, [\n 'title' => 'required',\n 'detail' => 'required'\n ]);\n\n if($validator->fails()){\n return $this->sendError('Validation Error.', $validator->errors());\n }\n\n $blog = Blog::create($input);\n\n return $this->sendResponse(new BlogResource($blog), 'Blog created successfully.');\n }\n\n // Display the specified resource.\n public function show($id): JsonResponse\n {\n $blog = Blog::find($id);\n\n if (is_null($blog)) {\n return $this->sendError('Blog not found.');\n }\n\n return $this->sendResponse(new BlogResource($blog), 'Blog retrieved successfully.');\n }\n\n // Update the specified resource in storage.\n public function update(Request $request, Blog $blog): JsonResponse\n {\n $input = $request->all();\n\n $validator = Validator::make($input, [\n 'title' => 'required',\n 'detail' => 'required'\n ]);\n\n if($validator->fails()){\n return $this->sendError('Validation Error.', $validator->errors());\n }\n\n $blog->title = $input['title'];\n $blog->detail = $input['detail'];\n $blog->save();\n\n return $this->sendResponse(new BlogResource($blog), 'Blog updated successfully.');\n }\n\n // Remove the specified resource from storage.\n public function destroy(Blog $blog): JsonResponse\n {\n $blog->delete();\n\n return $this->sendResponse([], 'Blog deleted successfully.');\n }\n}\n",[167,6858,6859,6863,6867,6883,6887,6905,6919,6944,6959,6978,6992,7010,7014,7019,7023,7045,7056,7060,7069,7073,7103,7107,7111,7121,7126,7130,7146,7150,7165,7176,7185,7189,7193,7207,7235,7239,7243,7252,7256,7267,7271,7275,7280,7285,7289,7303,7307,7328,7352,7356,7360,7371,7376,7381,7387,7393,7398,7415,7420,7433,7444,7453,7458,7463,7478,7507,7512,7517,7540,7561,7573,7578,7590,7595,7600,7606,7612,7617,7631,7636,7661,7666],{"__ignoreMap":115},[183,6860,6861],{"class":185,"line":12},[183,6862,4829],{"class":267},[183,6864,6865],{"class":185,"line":24},[183,6866,284],{"emptyLinePlaceholder":9},[183,6868,6869,6871,6873,6875,6877,6879,6881],{"class":185,"line":35},[183,6870,4838],{"class":267},[183,6872,4903],{"class":210},[183,6874,5657],{"class":267},[183,6876,4862],{"class":210},[183,6878,5888],{"class":267},[183,6880,4868],{"class":210},[183,6882,5893],{"class":267},[183,6884,6885],{"class":185,"line":47},[183,6886,284],{"emptyLinePlaceholder":9},[183,6888,6889,6891,6893,6895,6897,6899,6901,6903],{"class":185,"line":58},[183,6890,4856],{"class":717},[183,6892,264],{"class":267},[183,6894,4903],{"class":210},[183,6896,5657],{"class":267},[183,6898,4862],{"class":210},[183,6900,5888],{"class":267},[183,6902,4862],{"class":210},[183,6904,5916],{"class":267},[183,6906,6907,6909,6911,6913,6915,6917],{"class":185,"line":70},[183,6908,4856],{"class":717},[183,6910,4859],{"class":267},[183,6912,4903],{"class":210},[183,6914,5657],{"class":267},[183,6916,5660],{"class":210},[183,6918,5682],{"class":267},[183,6920,6921,6923,6925,6927,6929,6931,6933,6935,6938,6941],{"class":185,"line":301},[183,6922,4856],{"class":717},[183,6924,264],{"class":267},[183,6926,4903],{"class":210},[183,6928,5657],{"class":267},[183,6930,4862],{"class":210},[183,6932,5888],{"class":267},[183,6934,4868],{"class":210},[183,6936,6937],{"class":267},"PI",[183,6939,6940],{"class":210},"\\Ba",[183,6942,6943],{"class":267},"seController;\n",[183,6945,6946,6948,6950,6952,6954,6956],{"class":185,"line":316},[183,6947,4856],{"class":717},[183,6949,264],{"class":267},[183,6951,4841],{"class":210},[183,6953,6281],{"class":267},[183,6955,5290],{"class":210},[183,6957,6958],{"class":267},"log;\n",[183,6960,6961,6963,6965,6967,6969,6971,6973,6975],{"class":185,"line":322},[183,6962,4856],{"class":717},[183,6964,264],{"class":267},[183,6966,4903],{"class":210},[183,6968,5657],{"class":267},[183,6970,5660],{"class":210},[183,6972,5697],{"class":267},[183,6974,5290],{"class":210},[183,6976,6977],{"class":267},"logResource;\n",[183,6979,6980,6982,6984,6986,6988,6990],{"class":185,"line":347},[183,6981,4856],{"class":717},[183,6983,4859],{"class":267},[183,6985,4903],{"class":210},[183,6987,5657],{"class":267},[183,6989,5700],{"class":210},[183,6991,6320],{"class":267},[183,6993,6994,6996,6998,7000,7002,7004,7006,7008],{"class":185,"line":367},[183,6995,4856],{"class":717},[183,6997,4859],{"class":267},[183,6999,4955],{"class":210},[183,7001,5304],{"class":267},[183,7003,5307],{"class":210},[183,7005,5310],{"class":267},[183,7007,6337],{"class":210},[183,7009,6340],{"class":267},[183,7011,7012],{"class":185,"line":373},[183,7013,284],{"emptyLinePlaceholder":9},[183,7015,7016],{"class":185,"line":379},[183,7017,7018],{"class":267},"class BlogController extends BaseController\n",[183,7020,7021],{"class":185,"line":384},[183,7022,319],{"class":267},[183,7024,7025,7027,7030,7033,7036,7039,7041,7043],{"class":185,"line":390},[183,7026,5726],{"class":267},[183,7028,7029],{"class":210},"Display",[183,7031,7032],{"class":210}," a",[183,7034,7035],{"class":210}," listing",[183,7037,7038],{"class":210}," of",[183,7040,5732],{"class":210},[183,7042,5735],{"class":210},[183,7044,5747],{"class":267},[183,7046,7047,7049,7051,7053],{"class":185,"line":410},[183,7048,2181],{"class":210},[183,7050,328],{"class":210},[183,7052,2186],{"class":210},[183,7054,7055],{"class":267},"(): JsonResponse\n",[183,7057,7058],{"class":185,"line":415},[183,7059,2194],{"class":267},[183,7061,7062,7065,7067],{"class":185,"line":432},[183,7063,7064],{"class":267}," $blogs = Blog::",[183,7066,2258],{"class":210},[183,7068,364],{"class":267},[183,7070,7071],{"class":185,"line":450},[183,7072,284],{"emptyLinePlaceholder":9},[183,7074,7075,7077,7079,7081,7083,7085,7087,7090,7093,7096,7099,7101],{"class":185,"line":462},[183,7076,418],{"class":210},[183,7078,5033],{"class":267},[183,7080,6502],{"class":210},[183,7082,5383],{"class":267},[183,7084,6777],{"class":210},[183,7086,334],{"class":267},[183,7088,7089],{"class":210},"BlogResource",[183,7091,7092],{"class":267},"::collection($blogs), '",[183,7094,7095],{"class":210},"Blogs",[183,7097,7098],{"class":210}," retrieved",[183,7100,6793],{"class":210},[183,7102,6796],{"class":267},[183,7104,7105],{"class":185,"line":479},[183,7106,634],{"class":267},[183,7108,7109],{"class":185,"line":494},[183,7110,284],{"emptyLinePlaceholder":9},[183,7112,7113,7116,7118],{"class":185,"line":510},[183,7114,7115],{"class":267}," // Store ",[183,7117,2842],{"class":717},[183,7119,7120],{"class":267}," newly created resource in storage.\n",[183,7122,7123],{"class":185,"line":526},[183,7124,7125],{"class":267}," public function store(Request $request): JsonResponse\n",[183,7127,7128],{"class":185,"line":541},[183,7129,2194],{"class":267},[183,7131,7132,7134,7136,7138,7140,7142,7144],{"class":185,"line":557},[183,7133,5988],{"class":267},[183,7135,6543],{"class":210},[183,7137,6546],{"class":267},[183,7139,6549],{"class":210},[183,7141,5383],{"class":267},[183,7143,2258],{"class":210},[183,7145,364],{"class":267},[183,7147,7148],{"class":185,"line":572},[183,7149,284],{"emptyLinePlaceholder":9},[183,7151,7152,7154,7157,7159,7162],{"class":185,"line":588},[183,7153,5988],{"class":267},[183,7155,7156],{"class":210},"validator",[183,7158,6698],{"class":267},[183,7160,7161],{"class":210},"Validator",[183,7163,7164],{"class":267},"::make($input, [\n",[183,7166,7167,7169,7171,7174],{"class":185,"line":603},[183,7168,5789],{"class":192},[183,7170,5190],{"class":267},[183,7172,7173],{"class":192},"'required'",[183,7175,600],{"class":267},[183,7177,7178,7180,7182],{"class":185,"line":625},[183,7179,5797],{"class":192},[183,7181,5190],{"class":267},[183,7183,7184],{"class":192},"'required'\n",[183,7186,7187],{"class":185,"line":631},[183,7188,628],{"class":267},[183,7190,7191],{"class":185,"line":637},[183,7192,284],{"emptyLinePlaceholder":9},[183,7194,7195,7197,7199,7201,7203,7205],{"class":185,"line":1446},[183,7196,6140],{"class":210},[183,7198,5968],{"class":267},[183,7200,6485],{"class":210},[183,7202,5383],{"class":267},[183,7204,6490],{"class":210},[183,7206,6493],{"class":267},[183,7208,7209,7211,7213,7215,7217,7219,7221,7223,7225,7227,7229,7231,7233],{"class":185,"line":1467},[183,7210,1276],{"class":210},[183,7212,5033],{"class":267},[183,7214,6502],{"class":210},[183,7216,5383],{"class":267},[183,7218,6507],{"class":210},[183,7220,5402],{"class":267},[183,7222,6512],{"class":210},[183,7224,6515],{"class":210},[183,7226,6518],{"class":267},[183,7228,6485],{"class":210},[183,7230,5383],{"class":267},[183,7232,6525],{"class":210},[183,7234,6528],{"class":267},[183,7236,7237],{"class":185,"line":1488},[183,7238,1576],{"class":267},[183,7240,7241],{"class":185,"line":1494},[183,7242,284],{"emptyLinePlaceholder":9},[183,7244,7245,7248,7250],{"class":185,"line":1505},[183,7246,7247],{"class":267}," $blog = Blog::create($",[183,7249,6543],{"class":717},[183,7251,698],{"class":267},[183,7253,7254],{"class":185,"line":1511},[183,7255,284],{"emptyLinePlaceholder":9},[183,7257,7258,7260,7262,7264],{"class":185,"line":1523},[183,7259,6636],{"class":267},[183,7261,6502],{"class":717},[183,7263,5383],{"class":260},[183,7265,7266],{"class":267},"sendResponse(new BlogResource($blog), 'Blog created successfully.');\n",[183,7268,7269],{"class":185,"line":1536},[183,7270,634],{"class":267},[183,7272,7273],{"class":185,"line":1547},[183,7274,284],{"emptyLinePlaceholder":9},[183,7276,7277],{"class":185,"line":1568},[183,7278,7279],{"class":267}," // Display the specified resource.\n",[183,7281,7282],{"class":185,"line":1573},[183,7283,7284],{"class":267}," public function show($id): JsonResponse\n",[183,7286,7287],{"class":185,"line":1579},[183,7288,2194],{"class":267},[183,7290,7291,7293,7295,7297,7300],{"class":185,"line":1584},[183,7292,5988],{"class":267},[183,7294,60],{"class":210},[183,7296,6698],{"class":267},[183,7298,7299],{"class":210},"Blog",[183,7301,7302],{"class":267},"::find($id);\n",[183,7304,7305],{"class":185,"line":5210},[183,7306,284],{"emptyLinePlaceholder":9},[183,7308,7309,7311,7313,7316,7318,7321,7323,7325],{"class":185,"line":5216},[183,7310,6140],{"class":210},[183,7312,1179],{"class":267},[183,7314,7315],{"class":210},"is",[183,7317,5126],{"class":267},[183,7319,7320],{"class":210},"null",[183,7322,5968],{"class":267},[183,7324,60],{"class":210},[183,7326,7327],{"class":267},")) {\n",[183,7329,7330,7332,7334,7336,7338,7340,7342,7344,7347,7350],{"class":185,"line":5221},[183,7331,1276],{"class":210},[183,7333,5033],{"class":267},[183,7335,6502],{"class":210},[183,7337,5383],{"class":267},[183,7339,6507],{"class":210},[183,7341,5402],{"class":267},[183,7343,7299],{"class":210},[183,7345,7346],{"class":210}," not",[183,7348,7349],{"class":210}," found",[183,7351,6796],{"class":267},[183,7353,7354],{"class":185,"line":6838},[183,7355,1576],{"class":267},[183,7357,7358],{"class":185,"line":6843},[183,7359,284],{"emptyLinePlaceholder":9},[183,7361,7362,7364,7366,7368],{"class":185,"line":6848},[183,7363,6636],{"class":267},[183,7365,6502],{"class":717},[183,7367,5383],{"class":260},[183,7369,7370],{"class":267},"sendResponse(new BlogResource($blog), 'Blog retrieved successfully.');\n",[183,7372,7374],{"class":185,"line":7373},52,[183,7375,634],{"class":267},[183,7377,7379],{"class":185,"line":7378},53,[183,7380,284],{"emptyLinePlaceholder":9},[183,7382,7384],{"class":185,"line":7383},54,[183,7385,7386],{"class":267}," // Update the specified resource in storage.\n",[183,7388,7390],{"class":185,"line":7389},55,[183,7391,7392],{"class":267}," public function update(Request $request, Blog $blog): JsonResponse\n",[183,7394,7396],{"class":185,"line":7395},56,[183,7397,2194],{"class":267},[183,7399,7401,7403,7405,7407,7409,7411,7413],{"class":185,"line":7400},57,[183,7402,5988],{"class":267},[183,7404,6543],{"class":210},[183,7406,6546],{"class":267},[183,7408,6549],{"class":210},[183,7410,5383],{"class":267},[183,7412,2258],{"class":210},[183,7414,364],{"class":267},[183,7416,7418],{"class":185,"line":7417},58,[183,7419,284],{"emptyLinePlaceholder":9},[183,7421,7423,7425,7427,7429,7431],{"class":185,"line":7422},59,[183,7424,5988],{"class":267},[183,7426,7156],{"class":210},[183,7428,6698],{"class":267},[183,7430,7161],{"class":210},[183,7432,7164],{"class":267},[183,7434,7436,7438,7440,7442],{"class":185,"line":7435},60,[183,7437,5789],{"class":192},[183,7439,5190],{"class":267},[183,7441,7173],{"class":192},[183,7443,600],{"class":267},[183,7445,7447,7449,7451],{"class":185,"line":7446},61,[183,7448,5797],{"class":192},[183,7450,5190],{"class":267},[183,7452,7184],{"class":192},[183,7454,7456],{"class":185,"line":7455},62,[183,7457,628],{"class":267},[183,7459,7461],{"class":185,"line":7460},63,[183,7462,284],{"emptyLinePlaceholder":9},[183,7464,7466,7468,7470,7472,7474,7476],{"class":185,"line":7465},64,[183,7467,6140],{"class":210},[183,7469,5968],{"class":267},[183,7471,6485],{"class":210},[183,7473,5383],{"class":267},[183,7475,6490],{"class":210},[183,7477,6493],{"class":267},[183,7479,7481,7483,7485,7487,7489,7491,7493,7495,7497,7499,7501,7503,7505],{"class":185,"line":7480},65,[183,7482,1276],{"class":210},[183,7484,5033],{"class":267},[183,7486,6502],{"class":210},[183,7488,5383],{"class":267},[183,7490,6507],{"class":210},[183,7492,5402],{"class":267},[183,7494,6512],{"class":210},[183,7496,6515],{"class":210},[183,7498,6518],{"class":267},[183,7500,6485],{"class":210},[183,7502,5383],{"class":267},[183,7504,6525],{"class":210},[183,7506,6528],{"class":267},[183,7508,7510],{"class":185,"line":7509},66,[183,7511,1576],{"class":267},[183,7513,7515],{"class":185,"line":7514},67,[183,7516,284],{"emptyLinePlaceholder":9},[183,7518,7520,7522,7525,7527,7529,7531,7533,7535,7538],{"class":185,"line":7519},68,[183,7521,5988],{"class":267},[183,7523,7524],{"class":717},"blog-",[183,7526,5383],{"class":260},[183,7528,108],{"class":717},[183,7530,6546],{"class":267},[183,7532,6543],{"class":717},[183,7534,6563],{"class":267},[183,7536,7537],{"class":192},"'title'",[183,7539,3204],{"class":267},[183,7541,7543,7545,7547,7549,7552,7554,7556,7559],{"class":185,"line":7542},69,[183,7544,5988],{"class":267},[183,7546,7524],{"class":717},[183,7548,5383],{"class":260},[183,7550,7551],{"class":267},"detail = $",[183,7553,6543],{"class":717},[183,7555,6563],{"class":267},[183,7557,7558],{"class":192},"'detail'",[183,7560,3204],{"class":267},[183,7562,7564,7566,7568,7570],{"class":185,"line":7563},70,[183,7565,5988],{"class":267},[183,7567,7524],{"class":717},[183,7569,5383],{"class":260},[183,7571,7572],{"class":267},"save();\n",[183,7574,7576],{"class":185,"line":7575},71,[183,7577,284],{"emptyLinePlaceholder":9},[183,7579,7581,7583,7585,7587],{"class":185,"line":7580},72,[183,7582,6636],{"class":267},[183,7584,6502],{"class":717},[183,7586,5383],{"class":260},[183,7588,7589],{"class":267},"sendResponse(new BlogResource($blog), 'Blog updated successfully.');\n",[183,7591,7593],{"class":185,"line":7592},73,[183,7594,634],{"class":267},[183,7596,7598],{"class":185,"line":7597},74,[183,7599,284],{"emptyLinePlaceholder":9},[183,7601,7603],{"class":185,"line":7602},75,[183,7604,7605],{"class":267}," // Remove the specified resource from storage.\n",[183,7607,7609],{"class":185,"line":7608},76,[183,7610,7611],{"class":267}," public function destroy(Blog $blog): JsonResponse\n",[183,7613,7615],{"class":185,"line":7614},77,[183,7616,2194],{"class":267},[183,7618,7620,7622,7624,7626,7629],{"class":185,"line":7619},78,[183,7621,5988],{"class":267},[183,7623,7524],{"class":210},[183,7625,5383],{"class":267},[183,7627,7628],{"class":210},"delete",[183,7630,364],{"class":267},[183,7632,7634],{"class":185,"line":7633},79,[183,7635,284],{"emptyLinePlaceholder":9},[183,7637,7639,7641,7643,7645,7647,7649,7652,7654,7657,7659],{"class":185,"line":7638},80,[183,7640,418],{"class":210},[183,7642,5033],{"class":267},[183,7644,6502],{"class":210},[183,7646,5383],{"class":267},[183,7648,6777],{"class":210},[183,7650,7651],{"class":267},"([], '",[183,7653,7299],{"class":210},[183,7655,7656],{"class":210}," deleted",[183,7658,6793],{"class":210},[183,7660,6796],{"class":267},[183,7662,7664],{"class":185,"line":7663},81,[183,7665,634],{"class":267},[183,7667,7669],{"class":185,"line":7668},82,[183,7670,640],{"class":267},[145,7672,7674],{"id":7673},"الخطوة-7-انشاء-api-routes","الخطوة 7: انشاء API Routes",[128,7676,7677],{},"في هذة الخطوة سوف يتم انشاء API routes لل login, register, blogs.",[128,7679,7680],{},"اذهب الى routes/api.php",[175,7682,7684],{"className":4820,"code":7683,"language":4822,"meta":115,"style":115},"\u003C?php\n\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Route;\nuse App\\Http\\Controllers\\API\\RegisterController;\nuse App\\Http\\Controllers\\API\\BlogController;\n\nRoute::controller(RegisterController::class)->group(function(){\n Route::post('register', 'register')->name('register');\n Route::post('login', 'login')->name('login');\n});\n\nRoute::middleware('auth:sanctum')->group( function () {\n Route::apiResource('blogs', BlogController::class);\n Route::get('user', function (Request $request) {\n return $request->user();\n })->name('user');\n});\n",[167,7685,7686,7690,7694,7708,7727,7750,7773,7777,7787,7817,7845,7849,7853,7863,7875,7888,7902,7912],{"__ignoreMap":115},[183,7687,7688],{"class":185,"line":12},[183,7689,4829],{"class":267},[183,7691,7692],{"class":185,"line":24},[183,7693,284],{"emptyLinePlaceholder":9},[183,7695,7696,7698,7700,7702,7704,7706],{"class":185,"line":35},[183,7697,4856],{"class":717},[183,7699,4859],{"class":267},[183,7701,4903],{"class":210},[183,7703,5657],{"class":267},[183,7705,5660],{"class":210},[183,7707,5682],{"class":267},[183,7709,7710,7712,7714,7716,7718,7720,7722,7724],{"class":185,"line":47},[183,7711,4856],{"class":717},[183,7713,4859],{"class":267},[183,7715,4955],{"class":210},[183,7717,5304],{"class":267},[183,7719,5307],{"class":210},[183,7721,5310],{"class":267},[183,7723,5660],{"class":210},[183,7725,7726],{"class":267},"oute;\n",[183,7728,7729,7731,7733,7735,7737,7739,7741,7743,7745,7747],{"class":185,"line":58},[183,7730,4856],{"class":717},[183,7732,264],{"class":267},[183,7734,4903],{"class":210},[183,7736,5657],{"class":267},[183,7738,4862],{"class":210},[183,7740,5888],{"class":267},[183,7742,4868],{"class":210},[183,7744,6937],{"class":267},[183,7746,5660],{"class":210},[183,7748,7749],{"class":267},"egisterController;\n",[183,7751,7752,7754,7756,7758,7760,7762,7764,7766,7768,7770],{"class":185,"line":70},[183,7753,4856],{"class":717},[183,7755,264],{"class":267},[183,7757,4903],{"class":210},[183,7759,5657],{"class":267},[183,7761,4862],{"class":210},[183,7763,5888],{"class":267},[183,7765,4868],{"class":210},[183,7767,6937],{"class":267},[183,7769,5290],{"class":210},[183,7771,7772],{"class":267},"logController;\n",[183,7774,7775],{"class":185,"line":301},[183,7776,284],{"emptyLinePlaceholder":9},[183,7778,7779,7782,7784],{"class":185,"line":316},[183,7780,7781],{"class":267},"Route::controller(RegisterController::class)-",[183,7783,5383],{"class":260},[183,7785,7786],{"class":267},"group(function(){\n",[183,7788,7789,7792,7795,7798,7800,7802,7804,7806,7808,7810,7812,7815],{"class":185,"line":322},[183,7790,7791],{"class":210}," Route",[183,7793,7794],{"class":267},"::post(",[183,7796,7797],{"class":192},"'register'",[183,7799,4118],{"class":267},[183,7801,7797],{"class":192},[183,7803,1950],{"class":267},[183,7805,6055],{"class":210},[183,7807,5383],{"class":267},[183,7809,691],{"class":210},[183,7811,5402],{"class":267},[183,7813,7814],{"class":210},"register",[183,7816,5407],{"class":267},[183,7818,7819,7821,7823,7826,7828,7830,7832,7834,7836,7838,7840,7843],{"class":185,"line":347},[183,7820,7791],{"class":210},[183,7822,7794],{"class":267},[183,7824,7825],{"class":192},"'login'",[183,7827,4118],{"class":267},[183,7829,7825],{"class":192},[183,7831,1950],{"class":267},[183,7833,6055],{"class":210},[183,7835,5383],{"class":267},[183,7837,691],{"class":210},[183,7839,5402],{"class":267},[183,7841,7842],{"class":210},"login",[183,7844,5407],{"class":267},[183,7846,7847],{"class":185,"line":367},[183,7848,4211],{"class":267},[183,7850,7851],{"class":185,"line":373},[183,7852,284],{"emptyLinePlaceholder":9},[183,7854,7855,7858,7860],{"class":185,"line":379},[183,7856,7857],{"class":267},"Route::middleware('auth:sanctum')-",[183,7859,5383],{"class":260},[183,7861,7862],{"class":267},"group( function () {\n",[183,7864,7865,7867,7870,7872],{"class":185,"line":384},[183,7866,7791],{"class":210},[183,7868,7869],{"class":267},"::apiResource(",[183,7871,5365],{"class":192},[183,7873,7874],{"class":267},", BlogController::class);\n",[183,7876,7877,7879,7882,7885],{"class":185,"line":390},[183,7878,7791],{"class":210},[183,7880,7881],{"class":267},"::get(",[183,7883,7884],{"class":192},"'user'",[183,7886,7887],{"class":267},", function (Request $request) {\n",[183,7889,7890,7892,7894,7896,7898,7900],{"class":185,"line":410},[183,7891,418],{"class":210},[183,7893,5033],{"class":267},[183,7895,6549],{"class":210},[183,7897,5383],{"class":267},[183,7899,6695],{"class":210},[183,7901,364],{"class":267},[183,7903,7904,7907,7909],{"class":185,"line":415},[183,7905,7906],{"class":267}," })-",[183,7908,5383],{"class":260},[183,7910,7911],{"class":267},"name('user');\n",[183,7913,7914],{"class":185,"line":432},[183,7915,4211],{"class":267},[145,7917,7919],{"id":7918},"الخطوة-8-تشغيل-laravel-app","الخطوة 8: تشغيل Laravel App",[128,7921,7922],{},"قم بتشغيل database migrations (قبل تاكد من بيانات اتصال قاعدة البيانات في ملف .env قبل تشغيل هذا الامر)",[175,7924,7926],{"className":7925,"code":4623,"language":4014},[4012],[167,7927,4623],{"__ignoreMap":115},[128,7929,7930],{},"الان قم بتشغيل ال local development server",[175,7932,7934],{"className":7933,"code":4623,"language":4014},[4012],[167,7935,4623],{"__ignoreMap":115},[145,7937,7939],{"id":7938},"الخطوة-9-تاكد-من-ال-api","الخطوة 9: تاكد من ال API",[128,7941,7942],{},"الان سوف نذهب الى برنامج Postman للتاكد من ال API",[128,7944,7945],{},"قم بالتاكد ان headers كالاتي",[175,7947,7950],{"className":7948,"code":7949,"language":8,"meta":115,"style":115},"language-json shiki shiki-themes github-light github-dark","'headers' => [\n 'Accept' => 'application/json',\n 'Authorization' => 'Bearer '.$accessToken,\n]\n",[167,7951,7952,7957,7969,7984],{"__ignoreMap":115},[183,7953,7954],{"class":185,"line":12},[183,7955,7956],{"class":267},"'headers' => [\n",[183,7958,7959,7962,7964,7967],{"class":185,"line":24},[183,7960,7961],{"class":6468}," 'Accept'",[183,7963,438],{"class":6468},[183,7965,7966],{"class":6468}," 'application/json'",[183,7968,600],{"class":267},[183,7970,7971,7974,7976,7979,7982],{"class":185,"line":35},[183,7972,7973],{"class":6468}," 'Authorization'",[183,7975,438],{"class":6468},[183,7977,7978],{"class":6468}," 'Bearer",[183,7980,7981],{"class":6468}," '.$accessToken",[183,7983,600],{"class":267},[183,7985,7986],{"class":185,"line":47},[183,7987,7988],{"class":267},"]\n",[128,7990,7991],{},"الان يمكنك تشغيل الروابط مثل ماهو موضح بالصور ادناها",[1933,7993,7994,8001],{},[1936,7995,7996],{},[1939,7997,7998],{},[1942,7999,8000],{},"Postman",[1955,8002,8003,8010,8017,8024,8031,8038,8045,8052],{},[1939,8004,8005],{},[1960,8006,8007],{},[4657,8008],{"alt":8000,"src":8009},"https://raw.githubusercontent.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/main/scs/01.png",[1939,8011,8012],{},[1960,8013,8014],{},[4657,8015],{"alt":8000,"src":8016},"https://raw.githubusercontent.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/main/scs/02.png",[1939,8018,8019],{},[1960,8020,8021],{},[4657,8022],{"alt":8000,"src":8023},"https://raw.githubusercontent.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/main/scs/03.png",[1939,8025,8026],{},[1960,8027,8028],{},[4657,8029],{"alt":8000,"src":8030},"https://raw.githubusercontent.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/main/scs/04.png",[1939,8032,8033],{},[1960,8034,8035],{},[4657,8036],{"alt":8000,"src":8037},"https://raw.githubusercontent.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/main/scs/05.png",[1939,8039,8040],{},[1960,8041,8042],{},[4657,8043],{"alt":8000,"src":8044},"https://raw.githubusercontent.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/main/scs/06.png",[1939,8046,8047],{},[1960,8048,8049],{},[4657,8050],{"alt":8000,"src":8051},"https://raw.githubusercontent.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/main/scs/07.png",[1939,8053,8054],{},[1960,8055,8056],{},[4657,8057],{"alt":8000,"src":8058},"https://raw.githubusercontent.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/main/scs/08.png",[128,8060,8061],{},[2842,8062,8065],{"href":8063,"rel":8064},"https://github.com/akramghaleb/Laravel-11-Building-API-using-Sanctum/blob/main/postman/Laravel%20Sanctum.postman_collection.json",[2846],"ملاحظة: يمكنك تحميل ملف postman من هنا",[128,8067,8068],{},[2842,8069,8072],{"href":8070,"rel":8071},"https://github.com/akramghaleb/Laravel-11-Building-API-using-Sanctum",[2846],"مشروع ال Github",[128,8074,8075],{},"شكراً,",[128,8077,4649],{},[128,8079,8080],{},[2842,8081,8082],{"href":4654,"target":4655},[4657,8083],{"src":4659,"alt":4660,"width":4661},[2027,8085,8086],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s7hpK, html code.shiki .s7hpK{--shiki-default:#B31D28;--shiki-default-font-style:italic;--shiki-dark:#FDAEB7;--shiki-dark-font-style:italic}",{"title":115,"searchDepth":24,"depth":24,"links":8088},[8089,8090,8091,8092,8093,8094,8095,8096,8097],{"id":4778,"depth":24,"text":4779},{"id":4800,"depth":24,"text":4801},{"id":4813,"depth":24,"text":4814},{"id":5226,"depth":24,"text":5227},{"id":5622,"depth":24,"text":5623},{"id":5849,"depth":24,"text":5850},{"id":7673,"depth":24,"text":7674},{"id":7918,"depth":24,"text":7919},{"id":7938,"depth":24,"text":7939},"Laravel Sanctum عبارة عن حزمة مصادقة API لتطبيقات Laravel، مما يوفر نظام مصادقة خفيف الوزن وسهل الاستخدام لتطبيقات الصفحة الواحدة (SPAs)، وتطبيقات الهاتف المحمول، والمشاريع الأخرى التي تعتمد على واجهة برمجة التطبيقات (API).","/assets/img/blog/laravel/Laravel-11-Building-API-using-Sanctum.jpg","laravel-11-building-api-using-sanctum","Laravel,Laravel Sanctum,API authentication,Laravel API",{},"/ar/2024/06/2024-06-laravel-11-building-api-using-sanctum","2024-06-05T09:36:00.000Z",{"title":4690,"description":8098},{"loc":8103},"ar/2024/06/2024-06-Laravel-11-Building-API-using-Sanctum","Laravel 11 -","بناء API باستخدام Sanctum","tWtbd1qKGfkGcsucGVb09qZ-3tOKiJ0DBP8DDdTHXGA",{"id":8112,"title":8113,"body":8114,"category":4674,"client":2050,"description":8130,"extension":2052,"head":4675,"image":8558,"key":8559,"keywords":8560,"languages":2050,"meta":8561,"navigation":9,"ogImage":2050,"order":47,"path":8562,"preview1":2050,"preview1Title":2050,"preview2":2050,"preview2Title":2050,"preview3":2050,"preview3Title":2050,"project":2050,"publishedAt":8563,"ready":9,"robots":2050,"schemaOrg":2050,"seo":8564,"sitemap":8565,"stem":8566,"title_sub":8567,"title_sub_blue":8568,"visible":9,"__hash__":8569},"articles_ar/ar/2024/06/2024-06-route-rider-system.md","نظام رووت رايدر ",{"type":100,"value":8115,"toc":8554},[8116,8118,8120,8124,8128,8131,8137,8168,8170,8173,8179,8182,8187,8190,8195,8198,8203,8209,8215,8218,8274,8277,8341,8344,8349,8355,8363,8365,8370,8372,8374,8380,8386,8552],[103,8117],{":description":105,":image":106,":keywords":107,":title":108},[110,8119],{":src":106},[113,8121],{":client":8122,":preview3":8123,":preview3-title":4323,":project":108},"مفتوح المصدر","https://github.com/akramghaleb/Route-Rider-System",[124,8125,8127],{"id":8126},"نظام-رووت-رايدر","نظام رووت رايدر",[128,8129,8130],{},"تم بناء هذا المشروع في ورشة مسند.",[145,8132,8134,8135],{"id":8133},"هذا-المشروع-مبني-باستخدام-laravel-tailwind-filament","هذا المشروع مبني باستخدام Laravel + Tailwind + Filament ",[3981,8136],{},[132,8138,8139,8142,8145,8148,8151,8154,8157,8160,8163],{},[135,8140,8141],{},"دعم اللغة العربية والإنجليزية",[135,8143,8144],{},"يحتوي على صفحة هبوط",[135,8146,8147],{},"يدعم لوحة القيادة بميزات إحصائية",[135,8149,8150],{},"إمكانية التسجيل واستعادة كلمة المرور",[135,8152,8153],{},"إمكانية تغيير إعدادات الثيم",[135,8155,8156],{},"دعم الأدوار والأذونات",[135,8158,8159],{},"دعم الثيم الفاتح والداكن",[135,8161,8162],{},"دعم الحذف الناعم واستعادة المهام المحذوفة",[135,8164,8165,8166],{},"إذا أعجبك هذا العمل يمكنك ",[2842,8167,4370],{"href":4369},[145,8169,173],{"id":173},[128,8171,8172],{},"استنساخ المستودع",[175,8174,8177],{"className":8175,"code":8176,"language":4014},[4012],"git clone https://github.com/akramghaleb/Route-Rider-System.git\n",[167,8178,8176],{"__ignoreMap":115},[128,8180,8181],{},"تثبيت جميع الاعتماديات باستخدام Composer",[175,8183,8185],{"className":8184,"code":4587,"language":4014},[4012],[167,8186,4587],{"__ignoreMap":115},[128,8188,8189],{},"نسخ ملف .env.example وإجراء التغييرات المطلوبة في ملف .env",[175,8191,8193],{"className":8192,"code":4596,"language":4014},[4012],[167,8194,4596],{"__ignoreMap":115},[128,8196,8197],{},"توليد مفتاح تطبيق جديد",[175,8199,8201],{"className":8200,"code":4605,"language":4014},[4012],[167,8202,4605],{"__ignoreMap":115},[128,8204,8205,8206,1950],{},"تشغيل ترحيلات قاعدة البيانات (",[850,8207,8208],{},"قم بتعيين اتصال قاعدة البيانات في .env قبل الترحيل",[175,8210,8213],{"className":8211,"code":8212,"language":4014},[4012],"php artisan migrate --seed\n",[167,8214,8212],{"__ignoreMap":115},[128,8216,8217],{},"تأكد من تثبيت الاعتماديات:",[175,8219,8220],{"className":177,"code":4440,"language":179,"meta":115,"style":115},[167,8221,8222,8226,8232,8236,8240,8246,8250,8254,8260,8264,8268],{"__ignoreMap":115},[183,8223,8224],{"class":185,"line":12},[183,8225,4447],{"class":254},[183,8227,8228,8230],{"class":185,"line":24},[183,8229,4452],{"class":188},[183,8231,4455],{"class":192},[183,8233,8234],{"class":185,"line":35},[183,8235,284],{"emptyLinePlaceholder":9},[183,8237,8238],{"class":185,"line":47},[183,8239,4464],{"class":254},[183,8241,8242,8244],{"class":185,"line":58},[183,8243,4469],{"class":188},[183,8245,4455],{"class":192},[183,8247,8248],{"class":185,"line":70},[183,8249,284],{"emptyLinePlaceholder":9},[183,8251,8252],{"class":185,"line":301},[183,8253,4480],{"class":254},[183,8255,8256,8258],{"class":185,"line":316},[183,8257,4485],{"class":188},[183,8259,4455],{"class":192},[183,8261,8262],{"class":185,"line":322},[183,8263,284],{"emptyLinePlaceholder":9},[183,8265,8266],{"class":185,"line":347},[183,8267,4496],{"class":254},[183,8269,8270,8272],{"class":185,"line":367},[183,8271,4501],{"class":188},[183,8273,4455],{"class":192},[128,8275,8276],{},"بناء الكود الخاص بك:",[175,8278,8280],{"className":177,"code":8279,"language":179,"meta":115,"style":115},"# npm\nnpm run build\n\n# pnpm\npnpm run build\n\n# yarn\nyarn build\n\n# bun\nbun run build\n",[167,8281,8282,8286,8295,8299,8303,8311,8315,8319,8325,8329,8333],{"__ignoreMap":115},[183,8283,8284],{"class":185,"line":12},[183,8285,4447],{"class":254},[183,8287,8288,8290,8292],{"class":185,"line":24},[183,8289,4452],{"class":188},[183,8291,4522],{"class":192},[183,8293,8294],{"class":192}," build\n",[183,8296,8297],{"class":185,"line":35},[183,8298,284],{"emptyLinePlaceholder":9},[183,8300,8301],{"class":185,"line":47},[183,8302,4464],{"class":254},[183,8304,8305,8307,8309],{"class":185,"line":58},[183,8306,4469],{"class":188},[183,8308,4522],{"class":192},[183,8310,8294],{"class":192},[183,8312,8313],{"class":185,"line":70},[183,8314,284],{"emptyLinePlaceholder":9},[183,8316,8317],{"class":185,"line":301},[183,8318,4480],{"class":254},[183,8320,8321,8323],{"class":185,"line":316},[183,8322,4485],{"class":188},[183,8324,8294],{"class":192},[183,8326,8327],{"class":185,"line":322},[183,8328,284],{"emptyLinePlaceholder":9},[183,8330,8331],{"class":185,"line":347},[183,8332,4496],{"class":254},[183,8334,8335,8337,8339],{"class":185,"line":367},[183,8336,4501],{"class":188},[183,8338,4522],{"class":192},[183,8340,8294],{"class":192},[128,8342,8343],{},"بدء تشغيل خادم التطوير المحلي",[175,8345,8347],{"className":8346,"code":4623,"language":4014},[4012],[167,8348,4623],{"__ignoreMap":115},[128,8350,8351,8352],{},"يمكنك الآن الوصول على ",[2842,8353,4631],{"href":4631,"rel":8354},[2846],[128,8356,8357,8358,8362],{},"اسم المستخدم: ",[2842,8359,8361],{"href":8360},"mailto:admin@admin.com","admin@admin.com","\nكلمة المرور: password",[3981,8364],{},[128,8366,8367],{},[2842,8368,8072],{"href":8123,"rel":8369},[2846],[128,8371,8075],{},[128,8373,4649],{},[128,8375,8376],{},[2842,8377,8378],{"href":4654,"target":4655},[4657,8379],{"src":4659,"alt":4660,"width":4661},[128,8381,8382,8384],{},[3981,8383],{},[3981,8385],{},[1933,8387,8388,8395],{},[1936,8389,8390],{},[1939,8391,8392],{},[1942,8393,8394],{},"Web Screens",[1955,8396,8397,8405,8412,8419,8426,8433,8440,8447,8454,8461,8468,8475,8482,8489,8496,8503,8510,8517,8524,8531,8538,8545],{},[1939,8398,8399],{},[1960,8400,8401],{},[4657,8402],{"alt":8403,"src":8404},"Project Screenshot 2","https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/01.png",[1939,8406,8407],{},[1960,8408,8409],{},[4657,8410],{"alt":8403,"src":8411},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/02.png",[1939,8413,8414],{},[1960,8415,8416],{},[4657,8417],{"alt":8403,"src":8418},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/03.png",[1939,8420,8421],{},[1960,8422,8423],{},[4657,8424],{"alt":8403,"src":8425},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/04.png",[1939,8427,8428],{},[1960,8429,8430],{},[4657,8431],{"alt":8403,"src":8432},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/05.png",[1939,8434,8435],{},[1960,8436,8437],{},[4657,8438],{"alt":8403,"src":8439},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/06.png",[1939,8441,8442],{},[1960,8443,8444],{},[4657,8445],{"alt":8403,"src":8446},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/07.png",[1939,8448,8449],{},[1960,8450,8451],{},[4657,8452],{"alt":8403,"src":8453},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/08.png",[1939,8455,8456],{},[1960,8457,8458],{},[4657,8459],{"alt":8403,"src":8460},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/09.png",[1939,8462,8463],{},[1960,8464,8465],{},[4657,8466],{"alt":8403,"src":8467},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/10.png",[1939,8469,8470],{},[1960,8471,8472],{},[4657,8473],{"alt":8403,"src":8474},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/11.png",[1939,8476,8477],{},[1960,8478,8479],{},[4657,8480],{"alt":8403,"src":8481},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/12.png",[1939,8483,8484],{},[1960,8485,8486],{},[4657,8487],{"alt":8403,"src":8488},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/13.png",[1939,8490,8491],{},[1960,8492,8493],{},[4657,8494],{"alt":8403,"src":8495},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/14.png",[1939,8497,8498],{},[1960,8499,8500],{},[4657,8501],{"alt":8403,"src":8502},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/15.png",[1939,8504,8505],{},[1960,8506,8507],{},[4657,8508],{"alt":8403,"src":8509},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/16.png",[1939,8511,8512],{},[1960,8513,8514],{},[4657,8515],{"alt":8403,"src":8516},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/17.png",[1939,8518,8519],{},[1960,8520,8521],{},[4657,8522],{"alt":8403,"src":8523},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/18.png",[1939,8525,8526],{},[1960,8527,8528],{},[4657,8529],{"alt":8403,"src":8530},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/19.png",[1939,8532,8533],{},[1960,8534,8535],{},[4657,8536],{"alt":8403,"src":8537},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/20.png",[1939,8539,8540],{},[1960,8541,8542],{},[4657,8543],{"alt":8403,"src":8544},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/21.png",[1939,8546,8547],{},[1960,8548,8549],{},[4657,8550],{"alt":8403,"src":8551},"https://raw.githubusercontent.com/akramghaleb/Route-Rider-System/main/scs/22.png",[2027,8553,4668],{},{"title":115,"searchDepth":24,"depth":24,"links":8555},[8556,8557],{"id":8133,"depth":24,"text":8134},{"id":173,"depth":24,"text":173},"/assets/img/blog/opensource/02.png","route-rider-system","Full-Stack Developer",{},"/ar/2024/06/2024-06-route-rider-system","2024-06-05T09:08:00.000Z",{"title":8113,"description":8130},{"loc":8562},"ar/2024/06/2024-06-route-rider-system","نظام","رووت رايدر ","swXF_aSsaGT4Mbsa2m13ufXK3iNJJV9t3PeOzcxB9zA",{"id":8571,"title":8572,"body":8573,"category":8771,"client":2050,"description":8772,"extension":2052,"head":8773,"image":8774,"key":8775,"keywords":8560,"languages":2050,"meta":8776,"navigation":9,"ogImage":2050,"order":35,"path":8777,"preview1":2050,"preview1Title":2050,"preview2":2050,"preview2Title":2050,"preview3":2050,"preview3Title":2050,"project":2050,"publishedAt":8778,"ready":9,"robots":2050,"schemaOrg":2050,"seo":8779,"sitemap":8780,"stem":8781,"title_sub":8782,"title_sub_blue":8783,"visible":9,"__hash__":8784},"articles_ar/ar/2023/2023-08-what-is-chatgpt.md","ماهو ChatGPT?",{"type":100,"value":8574,"toc":8759},[8575,8577,8579,8583,8586,8600,8604,8607,8618,8622,8628,8632,8638,8642,8648,8656,8660,8663,8671,8675,8678,8686,8688,8694,8698,8701,8734,8738],[103,8576],{":description":105,":image":106,":keywords":107,":title":108},[110,8578],{":src":106},[145,8580,8582],{"id":8581},"مقدمة","مقدمة ",[128,8584,8585],{},"ChatGPT هي أداة ثورية لكتابة الذكاء الاصطناعي. يستخدم الذكاء الاصطناعي لإنشاء محتوى فريد لموقعك على الويب ومدونتك وحساباتك على وسائل التواصل الاجتماعي. ",[132,8587,8588,8594],{},[135,8589,8590,8591,8593],{},"كيف يعمل؟ ",[3981,8592],{},"\nيعمل ChatGPT من خلال تحليل المحتوى الذي لديك بالفعل على موقع الويب الخاص بك أو مدونتك ثم إنشاء مشاركات جديدة بناء على ما يعثر عليه. كلما زاد المحتوى لديك ، كان بإمكان ChatGPT معرفة كيفية الكتابة والموضوعات التي تهمك أكثر. بمجرد اكتمال هذه العملية ، كل ما تبقى لك هو الجلوس بينما يقوم ChatGPT بإخراج منشورات جديدة جديدة في ثوان! ",[135,8595,8596,8597,8599],{},"ما الذي يجعل ChatGPT مختلفا عن أدوات الكتابة الذكاء الاصطناعي الأخرى؟ ",[3981,8598],{},"\nالفرق الأكبر بين ChatGPT والخدمات المماثلة الأخرى هو أننا لا ننسخ النص الموجود فحسب ، بل ننشئ بدلا من ذلك مواد جديدة بناء على ما تمت كتابته بالفعل من قبل - لذلك ليست هناك حاجة لأي تدريب على الإطلاق! ",[145,8601,8603],{"id":8602},"فوائد-chatgpt","فوائد ChatGPT ",[128,8605,8606],{},"ChatGPT هي أداة ثورية الذكاء الاصطناعي للكتابة تتيح لك إنشاء محتوى عالي الجودة بسرعة التفكير. ",[132,8608,8609,8612,8615],{},[135,8610,8611],{},"توفير الوقت: يقوم ChatGPT تلقائيا بإنشاء كميات كبيرة من المحتوى الفريد عالي الجودة في ثوان. هذا يعني أنه يمكنك قضاء وقت أقل في الكتابة والمزيد من الوقت في القيام بما هو أكثر أهمية في عملك أو مؤسستك. ",[135,8613,8614],{},"فعالة من حيث التكلفة: مع ChatGPT ، ليست هناك حاجة لحسابهم الخاص أو الموظفين المكلفين الذين لديهم مهارات متخصصة مثل مؤلفي الإعلانات أو المسوقين - يمكنك ببساطة استخدام منصتنا كخيار بديل! ",[135,8616,8617],{},"محتوى عالي الجودة: الشيء الوحيد الأفضل من توفير الوقت والمال هو إنشاء شيء رائع من لا شيء! تتعلم خوارزمية الذكاء الاصطناعي الخاصة بنا من جميع المحادثات السابقة حتى تتحسن بمرور الوقت ، مما يعني أن كل جزء من المحتوى الذي تنشئه سيكون أفضل من الأخير. ",[145,8619,8621],{"id":8620},"كيفية-استخدام-chatgpt","كيفية استخدام ChatGPT ",[128,8623,8624,8625,8627],{},"للبدء ، ستحتاج إلى إنشاء حساب على موقع ChatGPT على الويب. يمكنك القيام بذلك عن طريق النقر فوق \"تسجيل\" في الزاوية اليمنى العليا من شاشتك واتباع تعليماتهم. ",[3981,8626],{},"\nبمجرد إنشاء حساب وتسجيل الدخول ، حان الوقت لبدء الكتابة! سيؤدي النقر فوق الزر \"قصة جديدة\" إلى إظهار مربع حوار حيث يمكنك إدخال عنوان قصتك واسم المؤلف وتفاصيل أخرى حول نوع القصة (خيالية أو غير خيالية). بمجرد ملئها ، انقر فوق \"إنشاء قصة جديدة\". ",[145,8629,8631],{"id":8630},"ميزات-chatgpt","ميزات ChatGPT ",[128,8633,8634,8635,8637],{},"ChatGPT هي أداة كتابة الذكاء الاصطناعي ثورية تعمل على أتمتة عملية إنشاء المحتوى وتحسينه. يقوم بذلك من خلال الجمع بين إنشاء الجمل التلقائي ومعالجة اللغة الطبيعية وتحسين المحتوى في منصة واحدة سهلة الاستخدام. ",[3981,8636],{},"\nتتيح لك منصة ChatGPT إنشاء منشورات مدونة عالية الجودة في دقائق معدودة بمجرد الإجابة على أسئلة حول موضوعك أو مجال عملك. ستتمكن من الاختيار من بين مئات المقالات المكتوبة مسبقا بناء على إجاباتك ، أو يمكنك إنشاء مقالتك المخصصة باستخدام أدوات المحرر القوية الخاصة بنا. ",[145,8639,8641],{"id":8640},"أمثلة-على-chatgpt-في-العمل","أمثلة على ChatGPT في العمل ",[128,8643,8644,8645,8647],{},"ChatGPT هي أداة كتابة الذكاء الاصطناعي ثورية تسمح لك بأتمتة عملية إنشاء المحتوى الخاص بك. هذا يعني أنه يمكنك التركيز على المهام المهمة الأخرى والسماح ل ChatGPT بالقيام بالرفع الثقيل نيابة عنك ، مما يوفر الوقت والمال في هذه العملية! ",[3981,8646],{},"\nتم استخدام ChatGPT من قبل العديد من الشركات والمؤسسات في جميع أنحاء العالم ، بما في ذلك: ",[132,8649,8650,8653],{},[135,8651,8652],{},"وكالة تسويق استخدمتها لكتابة مقالات لمواقع عملائها. لقد تمكنوا من زيادة إيراداتهم بنسبة 25٪ في غضون ستة أشهر من استخدام ChatGPT لأنهم يستطيعون الآن قضاء المزيد من الوقت في بيع خدماتهم بدلا من كتابة المقالات بأنفسهم. ",[135,8654,8655],{},"شركة عقارية استخدمته كنظام آلي لدعم العملاء للمشترين المحتملين الذين يبحثون عن عقارات عبر الإنترنت ؛ أدى ذلك إلى زيادة التحويلات بأكثر من 50٪. ",[145,8657,8659],{"id":8658},"كيف-يتطور-chatgpt","كيف يتطور ChatGPT ",[128,8661,8662],{},"ChatGPT يتطور باستمرار. نحن نعمل دائما بجد لجعله أفضل وأكثر كفاءة للمستخدمين ، لذلك أضفنا بعض الميزات الجديدة التي ربما لم ترها من قبل. ",[132,8664,8665,8668],{},[135,8666,8667],{},"القدرة على إنشاء القوالب المخصصة الخاصة بك! تتيح لك هذه الميزة إنشاء قالب يحتوي على جميع المعلومات التي تحتاجها ، ثم حفظه كمسودة أو نشره على الفور. إذا كنت ترغب في تغيير القالب لاحقا ، فما عليك سوى الرجوع إلى مجلد المسودات وتحريره بعيدا! ",[135,8669,8670],{},"تمت إضافة ميزة جديدة تسمى \"عروض الأسعار الذكية\" أيضا! هذا يعني أنه عندما يستخدم شخص ما علامات اقتباس حول النص (كما في هذه الجملة) ، سيقوم ChatGPT بإضافتها تلقائيا لهم - لا حاجة للإدخال اليدوي بعد الآن! ",[145,8672,8674],{"id":8673},"فوائد-الكتابة-التي-تعمل-بنظام-الذكاء-الاصطناعي","فوائد الكتابة التي تعمل بنظام الذكاء الاصطناعي ",[128,8676,8677],{},"الآن ، ربما تتساءل كيف يمكن للكتابة الذكاء الاصطناعي أن تفيد عملك أو مؤسستك. فيما يلي بعض الطرق: ",[132,8679,8680,8683],{},[135,8681,8682],{},"زيادة الإنتاجية. باستخدام ChatGPT ، يمكنك إنشاء المزيد من المحتوى بجهد أقل. سيكون لديك المزيد من الوقت للتركيز على المهام المهمة الأخرى مثل التسويق والمبيعات بالإضافة إلى التأكد من أن موقع الويب الخاص بك محدث مع الاتجاهات الحالية في الصناعة. ",[135,8684,8685],{},"تحسين جودة إنشاء المحتوى. مع تقنية ChatGPT الذكاء الاصطناعي في العمل خلف الكواليس ، ستضمن أن جميع المقالات التي تم إنشاؤها خالية من الأخطاء وخالية من الأخطاء النحوية - بغض النظر عن الغرض منها! هذا يعني أن القراء لن يواجهوا أي مشكلة في فهم ما يقرؤونه لأن كل شيء سيكون منطقيا من البداية إلى النهاية (والعكس صحيح). بالإضافة إلى أنه لم تعد هناك حاجة للمحررين بعد الآن لأن كل شيء قد تم فحصه بالفعل بواسطة الآلات قبل نشره عبر الإنترنت أو طباعته على نسخ ورقية \". ",[145,8687,2825],{"id":2825},[128,8689,8690,8691,8693],{},"ChatGPT هي أداة كتابة الذكاء الاصطناعي ثورية يمكن أن تساعدك في إنشاء محتوى بشكل أسرع وأكثر كفاءة. إنه سهل الاستخدام ، مع واجهة بسيطة وتعليمات واضحة للبدء. الأداة نفسها مجانية للاستخدام ، ولكن هناك أيضا خطط مدفوعة إذا كنت تريد ميزات إضافية مثل المراجعات غير المحدودة أو الدعم ذي الأولوية من فريق خدمة العملاء. ",[3981,8692],{},"\nإذا كنت تبحث عن طريقة أسهل لإنشاء منشورات مدونة دون الحاجة إلى إجراء كل الأبحاث بنفسك ، فجرب ChatGPT اليوم! ",[145,8695,8697],{"id":8696},"موارد","موارد ",[128,8699,8700],{},"لمعرفة المزيد حول ChatGPT ، تحقق من الموارد التالية: ",[132,8702,8703,8714,8724],{},[135,8704,8705,8706],{},"موقع ChatGPT الإلكتروني: ",[2842,8707,8710],{"href":8708,"rel":8709},"https://chatgpt.com/",[2846],[183,8711,8713],{"style":8712},"text-decoration: underline;","https://chatgpt.com/ ",[135,8715,8716,8717],{},"الوثائق الرسمية: ",[2842,8718,8721],{"href":8719,"rel":8720},"https://docs.chatgpt.com/en/latest/#getting-started",[2846],[183,8722,8723],{"style":8712},"https://docs.chatgpt.com/en/latest/#getting-started ",[135,8725,8726,8727],{},"مستودع GitHub لهذا المشروع: ",[2842,8728,8731],{"href":8729,"rel":8730},"https://github.com/chatgpt/chatgpt",[2846],[183,8732,8733],{"style":8712},"https://github.com/chatgpt/chatgpt ",[145,8735,8737],{"id":8736},"الأسئلة-الشائعة","الأسئلة الشائعة ",[132,8739,8740,8746],{},[135,8741,8742,8743,8745],{},"ما هو ChatGPT؟ ",[3981,8744],{},"\nChatGPT هي أداة ثورية الذكاء الاصطناعي للكتابة تسمح لك بإنشاء محتوى دون الحاجة إلى معرفة كيفية الكتابة. يمكن استخدامه من قبل أي شخص ، بغض النظر عن مستوى مهارته أو خبرته في إنشاء المحتوى. ",[135,8747,8748,8749,8751,8752,8758],{},"كيف أبدأ في استخدام ChatGPT؟",[3981,8750],{},"\nلبدء استخدام الأداة ، ما عليك سوى زيارة ",[2842,8753,8755,8757],{"href":8708,"rel":8754},[2846],[183,8756,8708],{"style":8712}," ","واختيار \"إنشاء مستند جديد\". سيطلب منك بعد ذلك إدخال عنوان لمستندك وتحديد فئته (مثل السفر أو العمل). بعد تحديد هذه الخيارات ، انقر فوق \"التالي\" في الركن الأيمن السفلي من شاشتك حتى ترى مربعا فارغا حيث يمكنك البدء في الكتابة! إذا كنت تريد بعض المساعدة للبدء في إنشاء محتوى رائع بسرعة وسهولة - أو إذا كان هناك شيء آخر على موقعنا يثير اهتمامك - انقر هنا! ",{"title":115,"searchDepth":24,"depth":24,"links":8760},[8761,8762,8763,8764,8765,8766,8767,8768,8769,8770],{"id":8581,"depth":24,"text":8582},{"id":8602,"depth":24,"text":8603},{"id":8620,"depth":24,"text":8621},{"id":8630,"depth":24,"text":8631},{"id":8640,"depth":24,"text":8641},{"id":8658,"depth":24,"text":8659},{"id":8673,"depth":24,"text":8674},{"id":2825,"depth":24,"text":2825},{"id":8696,"depth":24,"text":8697},{"id":8736,"depth":24,"text":8737},"ai","أداة الذكاء الاصطناعي للكتابة تسمح لك بإنشاء محتوى دون الحاجة إلى معرفة كيفية الكتابة.","AI","/assets/img/blog/ai/chatgpt.jpg","what-is-chatgpt",{},"/ar/2023/2023-08-what-is-chatgpt","2023-08-01T03:55:00.000Z",{"title":8572,"description":8772},{"loc":8777},"ar/2023/2023-08-what-is-chatgpt","ماهو","ChatGPT?","XhexJrsxdKZ6rkWplqcr6xXsJ_-KtCHchRqYlud67Ho",{"id":8786,"title":8787,"body":8788,"category":9088,"client":2050,"description":8797,"extension":2052,"head":9089,"image":9090,"key":9091,"keywords":8560,"languages":2050,"meta":9092,"navigation":9,"ogImage":2050,"order":24,"path":9093,"preview1":2050,"preview1Title":2050,"preview2":2050,"preview2Title":2050,"preview3":2050,"preview3Title":2050,"project":2050,"publishedAt":9094,"ready":9,"robots":2050,"schemaOrg":2050,"seo":9095,"sitemap":9096,"stem":9097,"title_sub":9098,"title_sub_blue":9089,"visible":9099,"__hash__":9100},"articles_ar/ar/2023/2023-01-flutter-state-management.md","إدارة الحالة في Flutter",{"type":100,"value":8789,"toc":9078},[8790,8792,8794,8798,8802,8844,8848,8879,8883,8920,8924,8955,8959,8989,8993,9023,9026,9050,9054],[103,8791],{":description":105,":image":106,":keywords":107,":title":108},[110,8793],{":src":106},[124,8795,8797],{"id":8796},"الحزم-الأكثر-شعبية-لإدارة-الحالة-في-flutter","الحزم الأكثر شعبية لإدارة الحالة في Flutter.",[145,8799,8801],{"id":8800},"bloc","Bloc",[132,8803,8806,8814,8820,8826,8832,8838],{"className":8804},[8805],"contains-task-list",[135,8807,8810,8813],{"className":8808},[8809],"task-list-item",[6543,8811],{"checked":9,"disabled":9,"type":8812},"checkbox"," من أشهر مكتبات إدارة الحالة.",[135,8815,8817,8819],{"className":8816},[8809],[6543,8818],{"checked":9,"disabled":9,"type":8812}," الكود منظم جيدًا وجيد للمشاريع واسعة النطاق.",[135,8821,8823,8825],{"className":8822},[8809],[6543,8824],{"checked":9,"disabled":9,"type":8812}," توثيق مكتوب بشكل جيد مع الأمثلة.",[135,8827,8829,8831],{"className":8828},[8809],[6543,8830],{"disabled":9,"type":8812}," معقد للمطورين الجدد.",[135,8833,8834],{},[2842,8835,8837],{"href":8836},"https://pub.dev/الحزمةs/flutter_bloc","الحزمة",[135,8839,8840],{},[2842,8841,8843],{"href":8842},"https://bloclibrary.dev/#/gettingstarted","توثيق",[145,8845,8847],{"id":8846},"reverpod","Reverpod",[132,8849,8851,8857,8863,8869,8874],{"className":8850},[8805],[135,8852,8854,8856],{"className":8853},[8809],[6543,8855],{"checked":9,"disabled":9,"type":8812}," شبه Provider والتعليمات البرمجية آمنة للترجمة.",[135,8858,8860,8862],{"className":8859},[8809],[6543,8861],{"checked":9,"disabled":9,"type":8812}," بسيطة وسهلة للبداء.",[135,8864,8866,8868],{"className":8865},[8809],[6543,8867],{"checked":9,"disabled":9,"type":8812}," المجتمع المتنامي والوثائق المكتوبة بشكل جيد.",[135,8870,8871],{},[2842,8872,8837],{"href":8873},"https://pub.dev/الحزمةs/riverpod",[135,8875,8876],{},[2842,8877,8843],{"href":8878},"https://riverpod.dev/docs/getting_started",[145,8880,8882],{"id":8881},"getx","GetX",[132,8884,8886,8892,8898,8904,8910,8915],{"className":8885},[8805],[135,8887,8889,8891],{"className":8888},[8809],[6543,8890],{"checked":9,"disabled":9,"type":8812}," حل مبسط لإدارة الحالة التفاعلية.",[135,8893,8895,8897],{"className":8894},[8809],[6543,8896],{"checked":9,"disabled":9,"type":8812}," سهل لمطوري Flutter الجدد.",[135,8899,8901,8903],{"className":8900},[8809],[6543,8902],{"checked":9,"disabled":9,"type":8812}," الكود قصير جدًا.",[135,8905,8907,8909],{"className":8906},[8809],[6543,8908],{"disabled":9,"type":8812}," من الصعب الحفاظ على المشاريع واسعة النطاق.",[135,8911,8912],{},[2842,8913,8837],{"href":8914},"https://pub.dev/الحزمةs/get",[135,8916,8917],{},[2842,8918,8843],{"href":8919},"https://chornthorn.github.io/getx-docs/index",[145,8921,8923],{"id":8922},"mobx","MobX",[132,8925,8927,8933,8939,8945,8950],{"className":8926},[8805],[135,8928,8930,8932],{"className":8929},[8809],[6543,8931],{"checked":9,"disabled":9,"type":8812}," مكتبة شعبية تعتمد على الملاحظات والتفاعل.",[135,8934,8936,8938],{"className":8935},[8809],[6543,8937],{"checked":9,"disabled":9,"type":8812}," الكود بسيط جدًا وسهل لمطوري Flutter الجدد.",[135,8940,8942,8944],{"className":8941},[8809],[6543,8943],{"disabled":9,"type":8812}," دعم أقل من المجتمع والبرامج التعليمية.",[135,8946,8947],{},[2842,8948,8837],{"href":8949},"https://pub.dev/الحزمةs/mobx",[135,8951,8952],{},[2842,8953,8843],{"href":8954},"https://mobx.netlify.app/",[145,8956,8958],{"id":8957},"provider","Provider",[132,8960,8962,8967,8973,8979,8984],{"className":8961},[8805],[135,8963,8965,8813],{"className":8964},[8809],[6543,8966],{"checked":9,"disabled":9,"type":8812},[135,8968,8970,8972],{"className":8969},[8809],[6543,8971],{"checked":9,"disabled":9,"type":8812}," اسهل من الbloc في الفهم.",[135,8974,8976,8978],{"className":8975},[8809],[6543,8977],{"checked":9,"disabled":9,"type":8812}," مدعومة من قبل فريق Flutter.",[135,8980,8981],{},[2842,8982,8837],{"href":8983},"https://pub.dev/الحزمةs/provider",[135,8985,8986],{},[2842,8987,8843],{"href":8988},"https://pub.dev/توثيق/provider/latest/provider/provider-library.html",[145,8990,8992],{"id":8991},"redux","Redux",[132,8994,8996,9002,9007,9013,9018],{"className":8995},[8805],[135,8997,8999,9001],{"className":8998},[8809],[6543,9000],{"checked":9,"disabled":9,"type":8812}," يعد نهج حاوية الحالة مألوفًا لدى العديد من مطوري الويب.",[135,9003,9005,8944],{"className":9004},[8809],[6543,9006],{"disabled":9,"type":8812},[135,9008,9010,9012],{"className":9009},[8809],[6543,9011],{"disabled":9,"type":8812}," لا توجد وثائق جيدة متاحة.",[135,9014,9015],{},[2842,9016,8837],{"href":9017},"https://pub.dev/الحزمةs/flutter_redux",[135,9019,9020],{},[2842,9021,8843],{"href":9022},"https://pub.dev/توثيق/redux/latest/",[145,9024,9025],{"id":9025},"states_rebuilder",[132,9027,9029,9035,9040,9045],{"className":9028},[8805],[135,9030,9032,9034],{"className":9031},[8809],[6543,9033],{"checked":9,"disabled":9,"type":8812}," نهج يجمع بين إدارة الحالة وحل حقن التبعية و توجيه متكامل.",[135,9036,9038,8944],{"className":9037},[8809],[6543,9039],{"disabled":9,"type":8812},[135,9041,9042],{},[2842,9043,8837],{"href":9044},"https://pub.dev/الحزمةs/states_rebuilder",[135,9046,9047],{},[2842,9048,8843],{"href":9049},"https://github.com/GIfatahTH/states_rebuilder/tree/master/states_rebuilder_الحزمة",[145,9051,9053],{"id":9052},"getit","GetIt",[132,9055,9057,9063,9068,9073],{"className":9056},[8805],[135,9058,9060,9062],{"className":9059},[8809],[6543,9061],{"checked":9,"disabled":9,"type":8812}," نهج إدارة الحالة القائم على محدد مواقع الخدمة والذي لا يحتاج إلى BuildContext.",[135,9064,9066,9012],{"className":9065},[8809],[6543,9067],{"disabled":9,"type":8812},[135,9069,9070],{},[2842,9071,8837],{"href":9072},"https://pub.dev/الحزمةs/get_it",[135,9074,9075],{},[2842,9076,8843],{"href":9077},"https://pub.dev/توثيق/get_it/latest/",{"title":115,"searchDepth":24,"depth":24,"links":9079},[9080,9081,9082,9083,9084,9085,9086,9087],{"id":8800,"depth":24,"text":8801},{"id":8846,"depth":24,"text":8847},{"id":8881,"depth":24,"text":8882},{"id":8922,"depth":24,"text":8923},{"id":8957,"depth":24,"text":8958},{"id":8991,"depth":24,"text":8992},{"id":9025,"depth":24,"text":9025},{"id":9052,"depth":24,"text":9053},"flutter","Flutter","/assets/img/blog/flutter/flutter-state.jpg","flutter-state-management",{},"/ar/2023/2023-01-flutter-state-management","2023-01-14T09:08:00.000Z",{"title":8787,"description":8797},{"loc":9093},"ar/2023/2023-01-flutter-state-management","إدارة الحالة في",false,"EUaGE13vfNlhz2tOO3t9Ybj_ZbHR9KsskcjCvGcXGMA",{"id":9102,"title":9103,"body":9104,"category":2396,"client":2050,"description":9533,"extension":2052,"head":9534,"image":9535,"key":9536,"keywords":8560,"languages":2050,"meta":9537,"navigation":9,"ogImage":2050,"order":12,"path":9538,"preview1":2050,"preview1Title":2050,"preview2":2050,"preview2Title":2050,"preview3":2050,"preview3Title":2050,"project":2050,"publishedAt":9539,"ready":9,"robots":2050,"schemaOrg":2050,"seo":9540,"sitemap":9541,"stem":9542,"title_sub":9543,"title_sub_blue":9544,"visible":9,"__hash__":9545},"articles_ar/ar/2022/2022-12-converting-alpine-transitions-to-vue-transitions.md","Alpine الى Vue transitions",{"type":100,"value":9105,"toc":9529},[9106,9108,9110,9113,9117,9147,9150,9155,9158,9192,9197,9200,9205,9208,9249,9257,9301,9306,9312,9355,9360,9363,9407,9411,9414,9417,9422,9425,9430,9526],[103,9107],{":description":105,":image":106,":keywords":107,":title":108},[110,9109],{":src":106},[128,9111,9112],{},"بعد قيامك بنسخ مكون من مكتبة Tailwind UI والبدء في تكييفه من Vue JS إلى Alpine JS.. قد تتساءل عما يجب فعله بشأن التحولات.",[171,9114,9116],{"id":9115},"أشياء-يجب-أن-تكون-على-علم-بها","أشياء يجب أن تكون على علم بها:",[132,9118,9119,9122,9125,9128,9131,9138,9141,9144],{},[135,9120,9121],{},"تسمي Alpine حالتي البداية والنهاية \"start\" و\"end\".",[135,9123,9124],{},"يستدعي Vue حالتي البداية والنهاية \"from\" و\"to\"",[135,9126,9127],{},"يحتوي Alpine \"directives\" ie x-transition:enter=\"classes\"",[135,9129,9130],{},"يحتوي Vue على مكون مجمّع يطبق الفئات على الطفل",[135,9132,9133,9134,9137],{},"يطبق Alpine الفئات التي تمررها لكل حالة، ",[9135,9136],"enter-start",{},"=\"class\"",[135,9139,9140],{},"تطبق Vue الفئات الافتراضية على العنصر الفرعي، class = \"enter-start\"",[135,9142,9143],{},"يحتوي مكون Vue على دعائم لتغيير الفئات الافتراضية",[135,9145,9146],{},"ليس لدى Vue دعم أصلي للنقر بعيدًا",[128,9148,9149],{},"لذلك مع أخذ كل ذلك في الاعتبار، أعتقد أن الخطوات التالية هي الطريقة البسيطة للانتقال بسرعة من انتقالات Alpine JS إلى Vue JS.",[128,9151,9152],{},[850,9153,9154],{},"1: قم بتغيير بناء الجملة المضمن إلى مكدس",[128,9156,9157],{},"حدد متعددًا في IDE الخاص بك ثم ضع كل انتقال x على سطر جديد",[175,9159,9161],{"className":705,"code":9160,"language":707,"meta":115,"style":115},"\u003Cdiv\n x-transition:enter=\"transition ease-out duration-200\"\n x-transition:enter-start=\"transform opacity-0 scale-95\">\n",[167,9162,9163,9170,9180],{"__ignoreMap":115},[183,9164,9165,9167],{"class":185,"line":12},[183,9166,714],{"class":267},[183,9168,9169],{"class":717},"div\n",[183,9171,9172,9175,9177],{"class":185,"line":24},[183,9173,9174],{"class":188}," x-transition:enter",[183,9176,353],{"class":267},[183,9178,9179],{"class":192},"\"transition ease-out duration-200\"\n",[183,9181,9182,9185,9187,9190],{"class":185,"line":35},[183,9183,9184],{"class":188}," x-transition:enter-start",[183,9186,353],{"class":267},[183,9188,9189],{"class":192},"\"transform opacity-0 scale-95\"",[183,9191,729],{"class":267},[128,9193,9194],{},[850,9195,9196],{},"2: قم بتغيير \"-start\" إلى \"-from\" و\"-end\" إلى \"-to\"",[128,9198,9199],{},"كما ذكرنا سابقًا، يستخدم Vue \"from\" و\"to\" وليس \"start\" و\"from\"",[128,9201,9202],{},[850,9203,9204],{},"3: إزالة x-transition: from من كل سطر",[128,9206,9207],{},"نقوم بتحويل هذه التوجيهات من توجيهات Alpine إلى خصائص Vue الثابتة",[175,9209,9211],{"className":705,"code":9210,"language":707,"meta":115,"style":115},"\u003Cdiv\n v-show=\"open\"\n enter=\"transition ease-out duration-200\"\n enter-from=\"transform opacity-0 scale-95\">\n",[167,9212,9213,9219,9229,9238],{"__ignoreMap":115},[183,9214,9215,9217],{"class":185,"line":12},[183,9216,714],{"class":267},[183,9218,9169],{"class":717},[183,9220,9221,9224,9226],{"class":185,"line":24},[183,9222,9223],{"class":188}," v-show",[183,9225,353],{"class":267},[183,9227,9228],{"class":192},"\"open\"\n",[183,9230,9231,9234,9236],{"class":185,"line":35},[183,9232,9233],{"class":188}," enter",[183,9235,353],{"class":267},[183,9237,9179],{"class":192},[183,9239,9240,9243,9245,9247],{"class":185,"line":47},[183,9241,9242],{"class":188}," enter-from",[183,9244,353],{"class":267},[183,9246,9189],{"class":192},[183,9248,729],{"class":267},[128,9250,9251],{},[850,9252,9253,9254,8757],{},"4: انقل props إلى مكون الغلاف ",[167,9255,9256],{},"\u003Ctransition>",[175,9258,9260],{"className":2394,"code":9259,"language":2396,"meta":115,"style":115},"\u003Ctransition\n enter=\"transition ease-out duration-200\"\n enter-from=\"transform opacity-0 scale-95\">\n \u003Cdiv v-show=\"open\">...\u003C/div>\n\u003C/transition>\n",[167,9261,9262,9269,9277,9287,9292],{"__ignoreMap":115},[183,9263,9264,9266],{"class":185,"line":12},[183,9265,714],{"class":267},[183,9267,9268],{"class":717},"transition\n",[183,9270,9271,9273,9275],{"class":185,"line":24},[183,9272,9233],{"class":188},[183,9274,353],{"class":267},[183,9276,9179],{"class":192},[183,9278,9279,9281,9283,9285],{"class":185,"line":35},[183,9280,9242],{"class":188},[183,9282,353],{"class":267},[183,9284,9189],{"class":192},[183,9286,729],{"class":267},[183,9288,9289],{"class":185,"line":47},[183,9290,9291],{"class":267}," \u003Cdiv v-show=\"open\">...\u003C/div>\n",[183,9293,9294,9296,9299],{"class":185,"line":58},[183,9295,1011],{"class":267},[183,9297,9298],{"class":717},"transition",[183,9300,729],{"class":267},[128,9302,9303],{},[850,9304,9305],{},"5: أضف \"-class\" إلى نهاية كل prop",[128,9307,9308,9309,9311],{},"يسمح لك مكون ",[167,9310,9256],{}," الخاص بـ Vue بإضافة فئات لتطبيقها على المكون الفرعي في كل نقطة في دورة حياة الانتقال. تتوافق أسماء الخصائص بشكل مثالي وتتطلب منا فقط إضافة \"-class\" إلى نهاية كل منها.",[175,9313,9315],{"className":2394,"code":9314,"language":2396,"meta":115,"style":115},"\u003Ctransition\n enter-active-class=\"transition ease-out duration-200\"\n enter-from-class=\"transform opacity-0 scale-95\">\n \u003Cdiv v-show=\"open\">...\u003C/div>\n\u003C/transition>\n",[167,9316,9317,9323,9332,9343,9347],{"__ignoreMap":115},[183,9318,9319,9321],{"class":185,"line":12},[183,9320,714],{"class":267},[183,9322,9268],{"class":717},[183,9324,9325,9328,9330],{"class":185,"line":24},[183,9326,9327],{"class":188}," enter-active-class",[183,9329,353],{"class":267},[183,9331,9179],{"class":192},[183,9333,9334,9337,9339,9341],{"class":185,"line":35},[183,9335,9336],{"class":188}," enter-from-class",[183,9338,353],{"class":267},[183,9340,9189],{"class":192},[183,9342,729],{"class":267},[183,9344,9345],{"class":185,"line":47},[183,9346,9291],{"class":267},[183,9348,9349,9351,9353],{"class":185,"line":58},[183,9350,1011],{"class":267},[183,9352,9298],{"class":717},[183,9354,729],{"class":267},[128,9356,9357],{},[850,9358,9359],{},"6: نقل التحويل إلى العنصر الفرعي",[128,9361,9362],{},"يجب إضافة التحويل إلى العنصر الفرعي ويمكن إزالته من خصائص النقل",[175,9364,9366],{"className":2394,"code":9365,"language":2396,"meta":115,"style":115},"\u003Ctransition\n enter-active-class=\"ease-out duration-200\"\n enter-from-class=\"opacity-0 scale-95\">\n \u003Cdiv v-show=\"open\" class=\"transform\">...\u003C/div>\n\u003C/transition>\n",[167,9367,9368,9374,9383,9394,9399],{"__ignoreMap":115},[183,9369,9370,9372],{"class":185,"line":12},[183,9371,714],{"class":267},[183,9373,9268],{"class":717},[183,9375,9376,9378,9380],{"class":185,"line":24},[183,9377,9327],{"class":188},[183,9379,353],{"class":267},[183,9381,9382],{"class":192},"\"ease-out duration-200\"\n",[183,9384,9385,9387,9389,9392],{"class":185,"line":35},[183,9386,9336],{"class":188},[183,9388,353],{"class":267},[183,9390,9391],{"class":192},"\"opacity-0 scale-95\"",[183,9393,729],{"class":267},[183,9395,9396],{"class":185,"line":47},[183,9397,9398],{"class":267}," \u003Cdiv v-show=\"open\" class=\"transform\">...\u003C/div>\n",[183,9400,9401,9403,9405],{"class":185,"line":58},[183,9402,1011],{"class":267},[183,9404,9298],{"class":717},[183,9406,729],{"class":267},[145,9408,9410],{"id":9409},"التعامل-clickaway","التعامل Click.away",[128,9412,9413],{},"Alpine تأتي مع سهولة التعامل مع Click.away.لاكن الفيو لا.",[128,9415,9416],{},"يمكنك تسجيل مستمع الحدث في Mounted للتعامل مع هذا السلوك كما يلي:",[128,9418,9419],{},[850,9420,9421],{},"1: أضف ref = \"component_name\" إلى العنصر الأصلي داخل المكون",[128,9423,9424],{},"أخبر المكون الخاص بك بعنصر html الذي يجب أن يشاهد النقرات خارجه",[128,9426,9427],{},[850,9428,9429],{},"2: استمع للنقرات وتحقق مما إذا كان العنصر خارج عنصر المرجع.",[175,9431,9435],{"className":9432,"code":9433,"language":9434,"meta":115,"style":115},"language-javascript shiki shiki-themes github-light github-dark","mounted() {\n document.addEventListener('click', event => {\n event.stopPropagation();\n if(!this.$refs.component_name.contains(event.target)) {\n this.open = false;\n }\n });\n}\n","javascript",[167,9436,9437,9445,9467,9477,9498,9513,9518,9522],{"__ignoreMap":115},[183,9438,9439,9442],{"class":185,"line":12},[183,9440,9441],{"class":188},"mounted",[183,9443,9444],{"class":267},"() {\n",[183,9446,9447,9450,9453,9455,9458,9460,9463,9465],{"class":185,"line":24},[183,9448,9449],{"class":267}," document.",[183,9451,9452],{"class":188},"addEventListener",[183,9454,334],{"class":267},[183,9456,9457],{"class":192},"'click'",[183,9459,4118],{"class":267},[183,9461,9462],{"class":337},"event",[183,9464,438],{"class":260},[183,9466,1146],{"class":267},[183,9468,9469,9472,9475],{"class":185,"line":35},[183,9470,9471],{"class":267}," event.",[183,9473,9474],{"class":188},"stopPropagation",[183,9476,364],{"class":267},[183,9478,9479,9482,9484,9486,9489,9492,9495],{"class":185,"line":47},[183,9480,9481],{"class":260}," if",[183,9483,334],{"class":267},[183,9485,1182],{"class":260},[183,9487,9488],{"class":210},"this",[183,9490,9491],{"class":267},".$refs.component_name.",[183,9493,9494],{"class":188},"contains",[183,9496,9497],{"class":267},"(event.target)) {\n",[183,9499,9500,9503,9506,9508,9511],{"class":185,"line":58},[183,9501,9502],{"class":210}," this",[183,9504,9505],{"class":267},".open ",[183,9507,353],{"class":260},[183,9509,9510],{"class":210}," false",[183,9512,279],{"class":267},[183,9514,9515],{"class":185,"line":70},[183,9516,9517],{"class":267}," }\n",[183,9519,9520],{"class":185,"line":301},[183,9521,5443],{"class":267},[183,9523,9524],{"class":185,"line":316},[183,9525,640],{"class":267},[2027,9527,9528],{},"html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":115,"searchDepth":24,"depth":24,"links":9530},[9531,9532],{"id":9115,"depth":35,"text":9116},{"id":9409,"depth":24,"text":9410},"تحويل Alpine transitions الى Vue transitions","Vue","/assets/img/blog/vue/alpine-to-vue-transaction.jpg","converting-alpine-transitions-to-vue-transitions",{},"/ar/2022/2022-12-converting-alpine-transitions-to-vue-transitions","2022-12-03T04:14:00.000Z",{"title":9103,"description":9533},{"loc":9538},"ar/2022/2022-12-converting-alpine-transitions-to-vue-transitions","Alpine الى Vue","transitions","qjhvF9U1dXd4aRwhwE8fF-CuQt8vnFqmX7pqSI34bQA",["Reactive",9547],{"$si18n:cached-locale-configs":9548,"$si18n:resolved-locale":9553,"$scolor-mode":9554,"$snuxt-seo-utils:routeRules":9556,"$ssite-config":9557},{"en":9549,"ar":9551},{"fallbacks":9550,"cacheable":9},[],{"fallbacks":9552,"cacheable":9},[],"ar",{"preference":9555,"value":9555,"unknown":9,"forced":9099},"system",{"head":-1,"seoMeta":-1},{"_priority":9558,"currentLocale":9553,"defaultLocale":9562,"description":9563,"env":9564,"name":9565,"url":9566},{"name":9559,"env":9560,"url":9559,"description":9559,"defaultLocale":9561,"currentLocale":9561},-3,-15,-2,"en","Discover unparalleled web solutions with me. With my expertise and client-centric approach, your success is my priority.","production","Akram Dev","https://akramdev.com",["Set"],["ShallowReactive",9569],{"menu-menu_ar":-1,"menu_ar":-1,"articles_ar":-1},"/ar/blog",{"aboutPage":9572,"navbar":9578,"setting":9579,"homePage":9581},{"data":9573,"email":9574,"phone_1":9575,"phone_2":115,"freelance_availablity":9,"map":115,"image":9576,"is_show_cv":9,"is_show_button":9099,"button_link":9577,"is_show_experience":9,"is_show_education":9,"work_experience":301,"is_show_skills":9},{},"akramghaleb2018@gmail.com","+967776284933","/assets/img/about-page/about.png","https://api.whatsapp.com/send?phone=967776284933",{"value":9099},{"background":9580,"is_show_cv":9,"is_show_button":9,"is_eng":9,"is_ar":9,"lang":9562},"/assets/img/home2-hero-bg-dark.png",{"data":9582,"completed_projects":625,"is_show_cv":9099,"is_show_button":9,"button_link":9577,"image":9583,"icon_1":9584,"icon_2":9585},{},"/assets/img/home-page/hero-thumbnail.png","/assets/img/home-page/laravel-logo.png","/assets/img/home-page/vue-logo.png"]