-
المساهمات
5232 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
52
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Adnane Kadri
-
يمكنك الإستعانة بالمحددات الزائفة لتحقيق نفس الغرض. أظن أنه يوجد بمكان ما بملفات التنسيقات شيفرة كالتالي: p::after{ content:''; width:1px; height:100%; background:orange; position:absolute; left:0; top:0; } بمعنى: أنه يوجد عنصر زائف يتم إضافته بعد الفقرة المحددة ويتم إعطاء هذا العنصر عرض 1 بكسل و إرتفاع 100 بالمئة من عرض الفقرة حيث يتموضع بشكل مطلق بمسافة 0 من اليسار و0 من الأعلى. وبالتالي، وللتحكم في موضعه لنتأكد فقط من جعله يتموضع بمسافة 0 من اليمين لا من اليسار و0 من الأعلى: p::after{ content:''; width:1px; height:100%; background:orange; position:absolute; right:0; top:0; } تعرف أكثر عن محددات الأصناف الزائفة (pseudo-classes) في المحددات (Selectors) في CSS.
-
أولا يمكنك جعل كامل الصور على سطر واحد عن طريق إرفاق الحاوي blocks بالقيمة nowrap في الخاصية flex-wrap للتأكد من أن الصندوق المرن لن ينزل سطرا في حالة تجاوز عرض أحد الصناديق للمسافة المقصودة. #blocks { margin-top: 20px; padding: 60px 120px; display: flex; flex-flow: row wrap; justify-content: center; align-content: center; align-items: flex-start; flex-wrap: nowrap; /*++++++++++++++++++++*/ } بعد هذا سنحتاج إعطاء الصور عرضا وإرتفاعا متساويا وليكن على الخيار: #blocks .conten img { height: 500px; width: 500px; } لا أفضل هذا الخيار لأنه قد يؤدي إلى تبدد الصورة وعدم ظهورها بحجمها الفعلي، عوضا عن ذلك أفضل إعطاء الصور ارتفاعا متساويا وعرضا تلقائيا، وتقطيع أو إخفاء الأجزاء المتجاوزة من الصورة لعرض الحاوي. لنقم بإعطاء الحاوي conten القيمة hidden في الخاصية overflow: #blocks .conten { text-align: center; margin-left: 15px; position: relative; overflow: hidden; } ثم ارتفاعا متساويا وعرضا تلقائيا للصورة داخله: #blocks .conten img { height: 500px; width:auto; } ولفهم دور overflow:hidden في هذا قم بتعليق سطرها ولاحظ التأثير. توثيق الخاصية overflow .
-
يمكنك عمل ذلك عن طريق إظهار نافذة نموذج بشكل نافذة منبثقة بعد إعطاءها الإشارة عن طريق الحدث window.onload. كما يمكن الإستعانة ببوتسراب لتحقيق هذا الغرض عن طريق مكون النوافذ Modal. نقوم بتضمين الملفات اللازمة لعمل بوتستراب بصفحة الـ HTML لدينا: <!-- bootstrap تضمين ملف --> <link rel="stylesheet" href="[BOOTSTRAP_CSS_HERE]"> <!-- تضمين ملف جيكويري --> <script src="[JQUERY_CDN_LINK_HERE]"></script> <!-- popper تضمين ملف --> <script src="[POPPERJS_CDN_LINK_HERE]"></script> <!-- bootstrap تضمين ملف --> <script src="[BOOTSTRAP_JS_HERE]"></script> إضافة عنصر النموذج modal إلى صفحة الـ HTML لدينا: <div class="modal" tabindex="-1" role="dialog"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title">عنوان النافذة</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <p>قم بإضافة نموذجك هنا</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-primary">حفظ التغييرات</button> <button type="button" class="btn btn-secondary" data-dismiss="modal">إغلاق</button> </div> </div> </div> </div> إظهار النموذج بمجرد تمام تحميل موارد الصفحة: $(window).load(function(){ $('#myModal').modal('show') }) تعرف على بوتستراب أكثر هنا.
- 1 جواب
-
- 1
-
-
بالطبع يمكنك ذلك، ويتم تثبيته وإعداده بخطوات بسيطة. في الحقيقة، يوجد ثلاث طرق لعمل ذلك نلخصها في التالي: التثبيت والإستعمال عن طريق CDN خارجي. تضمين بوتستراب عن طريق تثبيته كإعتمادية عن طريق مدير الحزم npm. إستعمال واحدة من حزم React Bootstrap. الطريقة الأولى: التثبيت والإستعمال عن طريق CDN خارجي ولعلها أسهل طريقة، أين يمكن مباشرة تضمين ملفات التنسيقات والجافاسكربت وإرفاقها بروابط صالحة، فملفات التنسيقات تضمن في وسم head كالتالي: <link rel="stylesheet" href="[BOOTSTRAP_CSS_HERE]"> ويتم تضمين ملفات الجافاسكربت لها كالتالي: <!-- تضمين ملف جيكويري --> <script src="[JQUERY_CDN_LINK_HERE]"></script> <!-- popper تضمين ملف --> <script src="[POPPERJS_CDN_LINK_HERE]"></script> <!-- bootstrap تضمين ملف --> <script src="[BOOTSTRAP_JS_HERE]"></script> الطريقة الثانية: تضمين بوتستراب عن طريق تثبيته كإعتمادية عن طريق مدير الحزم npm أين ستحتاج في هذا تثبيت حزمة bootstrap عن طريق مدير الحزم npm كالتالي: npm install bootstrap ثم تضمين ملفات تنسيقات بوتستراب وأيضا jQuery و popper في ملف index.js كالتالي: import 'bootstrap/dist/css/bootstrap.min.css'; import $ from 'jquery'; import Popper from 'popper.js'; import 'bootstrap/dist/js/bootstrap.bundle.min'; import React from 'react'; ان لم تكن قد قمت بتثبيت jquery و popper فتأكد من ذلك أولا عن طريق طباعة الأمر: npm install jquery popper.js لأن بوتستراب يستعمل كلا منهما. الطريقة الثالثة: إستعمال واحدة من حزم React Bootstrap لعل الأكثر شيوعا من بين هاته الحزم هي حزمة react-bootstrap، يتم تثبيتها عن طريق طباعة الأمر: npm install react-bootstrap bootstrap@5.1.3 ثم بتضمين المكون المستهدف لإستعماله: import { Button } from 'react-bootstrap'; الإستعمال: <Button variant="primary">زر بوتستراب</Button>
-
يمكنك البدء مباشرة بالمسارات الأخرى التي تحوي معلومات أحدث، ولا حاجة لك في أرشيف المسارات الأقدم. يمكنك التخلي عن مشاهدته. السبب الأرجح في عدم التخلي عن أرشيف المسارات الأقدم بعد تحديث الكورسات هو في كون امتلاك المشترك في دورات الأكاديمية وصولا مدى الحياة، فالأكاديمية لا تلزم الطلاب بمشاهدة الفيديوهات في أوقات محددة، ولذلك نجد بعض الطلبة الذين لا يزالون يحتاجونه كونهم قد تأخروا عن إنهاء الكورس أو مشاهدته.
- 3 اجابة
-
- 1
-
-
صحيح، ان تصنيفات أرشيفات المسار الأقدم من دورات الأكاديمية هو القسم الذي يحوي أرشيف المسارات التي تم تحديثها وإستبدالها بمسارات أحدث. وفي الغالب، لن يكون عليك مشاهدتها ان لم تكن قد بدأت بها بالفعل.
-
ليس تماما، يصطلح بـ "مجموعة بدء" أو "Starter Kit" أو "Starter Pack" على أي مجموعة من الأدوات، أطر العمل والحزم التي تقدم لشخص يقوم بنشاط معين أو يبدأ عملية ما لأول مرة، قد يكون بناء مشروع جديد أو غيرها من العمليات. تقترح لارافيل بدورها مجموعة أدوات ترى أنها تسهل تطبيق لارافيل لأول مرة، هاته الأدوات هي: Laravel Breeze: والذي هو تطبيق لارافيل بسيط يتضمن كامل ميزات مصادقة Laravel، بما في ذلك تسجيل الدخول والتسجيل وإعادة تعيين كلمة المرور والتحقق من البريد الإلكتروني وتأكيد كلمة المرور بسطر أوامر واحد. يمكن تخصيصه للعمل مع Vue أو React. Laravel Jetstream : وهو تطبيق مصمم بشكل جميل يوفر ميزات متعددة يوفرها لارافيل مثل تسجيل الدخول والتسجيل والتحقق من البريد الإلكتروني والتوثيق الثنائي وإدارة الجلسة وواجهة برمجة التطبيقات عبر Laravel Sanctum وميزات إدارة الفريق الاختيارية وغيرها الكثير. وبالطبع فإن إستعمال مجموعات البدء ليس اجباريا، فلارافيل تترك لك حرية استخدامها أو الاستفادة منها وضمها إلى تطبيقك وتنزيلها بشكل منفصل، فهي لا تأتي معه.
-
هل يمكنك إرفاق كامل شيفرة المكون الأب؟
-
بالشكل الأبسط، ليس تعريب قوالب ووردبريس إلا مثل جعل ملفات HTML و CSS عادية مترجمة إلى العربية مع ملائمة تنسيقاتها للغة العربية، مثل محاذاة النصوص وتعويم العناصر وغيرها. توفر بعض القوالب ملفات لغات معينة، في حين أن البعض الآخر يقوم مباشرة بطباعة الكلمات والجمل باللغة الافتراضية في ملفات المكونات ذات اللواحق php. مثل: template-parts/header/header.php template-parts/footer/footer.php تكون ملف اللغات لقوالب ووردبريس في المسار التالي عادة: theme/inc/translations.php تقوم مثل هاته الملفات بإعادة مصفوفة ترابطية بمفتاح كل كلمة أو جملة تقابلها ترجمتها معبرة بقيمة هذا المفتاح. نقوم بتعديل قيم كل مفتاح وترجمته إلى العربية. في تعديل تنسيقات الـ css سيمكن ذلك عن طريق تعديل ملفات التنسيقات الكائنة عادة بـ : css/
-
في الحقيقة، تطوير واجهات المستخدم ليس إلا مجالا من مجالات البرمجة الكثيرة، ومجال البرمجة هو نفسه تفرع من بين التفرعات الكثيرة عن علوم الحاسب. ولذلك فإن تعلم أساسيات التفكير المنطقي والخوارزميات وغيرها يفتح المجال لتعلم أي مجال برمجي ويوحد منطق تعلم أي من هاته المجالات أو أي من لغات البرمجة. عموما، نعم سيمكنك بعد الإنتهاء من دورة علوم الحاسب البرمجة عن طريق لغة JavaScript، كما و ستتعلم البرمجة بلغة Python. فالدورة تضم مسارين من أصل ثمان: أساسيات البرمجة بلغة JavaScript. البرمجة الكائنية التوجه بلغة Python.
-
يحدث هذا بسبب أن المنفذ الذي يقوم Apache بإستعماله مستعمل بالفعل من قبل برنامج آخر. في الغالب، يكون هذا المنفذ هو المنفذ 80، وبالتالي ولحل المشكل نقوم إما بـ : تعطيل أو إغلاق أو تغيير منفذ البرنامج الذي يقوم بحجز هذا المنفذ إعداد خادم Apache ليستخدم منفذا آخرا من لوحة تحكم xampp بالقسم الخاص بـخادم apache اضغط إعداد config. من القائمة المنسدلة اختر Apache(httpd.conf) سيتم فتح الملف httpd.conf في محرر نصوص قم بالبحث عن رقم المنفذ 80 (يمكن عادة البحث في محركات النصوص عن طريق الضغط على ctrl+f وطباعة السلسلة النصية المراد البحث عنها) قم بتغييرها إلى 8080 في كامل المواضع التالية: Port 80 => Port 8080 Listen 80 => Listen 8080 servername localhost: 80 => servername localhost: 8080 يجب التأكد من حفظ الملف وإغلاقه، ثم القيام بنفس الخطوات في تغيير المنافذ 443 إلى 4433 في ملف htpd-ssl.conf: المواضع التي يجب تغييرها في الملف هي: Listen 443 => Listen 4433 <VirtualHost_default_:443> => <VirtualHost_default_:4433> يجب التأكد بعد هذا من حفظ الملف وإعادة تشغيل خادم Apache.
- 2 اجابة
-
- 2
-
-
مرحبا سلطان، يتم في دورة تطوير واجهات المستخدم شرح أساسيات تطوير الويب، إبتداءا من أساسيات HTML مرورا بأساسيات CSS ثم JavaScript ليتم بذلك الإنتقال إلى مجموعة مسارات تطبيقات عملية يتم فيها التعمق في هاته المفاهيم والتعرف عليها بشكل مفصل وعملي أكثر. أما الدورة التي يتم فيها التعرف على الخوارزميات وبنى البيانات وأنماط التصميم وغيرها هي دورة علوم الحاسوب التي ستتدرج فيها إبتداءا من مدخل إلى علوم الحاسب وأساسيات البرمجة والتفكير المنطقي والخوارزميات إلى مبادئ البرمجة مرورا بأنظمة التشغيل وقواعد البيانات. إذ أن كل هذا سيكون كفيلا بأن يجعلك تحسم خيارك بشأن المسار الذي ستأخذه في مستقبلك البرمجي. ولذلك فإنه يقترح -في حالة عدم اكتساب أي خبرة تقنية- البدء بدورة علوم الحاسوب والتأسس جيدا في مفاهيم البرمجة ,التطوير والهندسة ثم سيكون الإنتقال إلى دورة تطوير الويب أكثر سلاسة وسهولة، لأنها حجر الأساس لأي دورة أخرى من الدورات. علما أنه بمجرد تسجيلك في دورة من دورات الأكاديمية سيتم فتح أول مسار من كل دورة من الدورات التي تقدمها الأكاديمية: دورة علوم الحاسب. دورة تطوير واجهات المستخدم. دورة تطوير التطبيقات بإستخدام جافاسكربت. دورة تطوير تطبيقات الويب بإستخدام PHP. دورة تطوير التطبيقات بإستخدام تقنيات الويب. دورة تطوير تطبيقات الويب بإستخدام لغة Ruby.
- 3 اجابة
-
- 1
-
-
إن كنت تحاول إظهار مجموعة حقول بناء على الخيار الذي يحدده المستخدم من قائمة خيارات المنسدلة فهذا تلاعب في شجرة الوثيقة ومن مستحيل عمل ذلك بدون الجافاسكربت ﻷن جافاسكربت وجدت لدعم هاته التفاعليات والتلاعبات. مثال: اذا قام المستخدم بتحديد خيار جواز سفر يتم إظهار حقلي رقم جواز السفر ورقم التأشيرة. ولذلك فإن العملية نظريا وعمليا مستحيلة بالإستغناء عن جافاسكربت، وما يقوم به صاحب الشيفرة في الرابط المرفق هو ليس تلاعبا في شجرة الوثيقة بعد تحميل موارد الصفحة، بل هو ضبط شرطي للإعدادات الإفتراضية التي تكون عليها قائمة الخيارات. مثال: لنقل أن مستخدما ما يريد تعديل حالته من "صاحب شركة ناشئة" إلى "عامل حر". بعد أن يتوجه هذا المستخدم إلى صفحة التعديل نحتاج افتراضيا ضبط الخيار الافتراضي الذي قام بتحديده سابقا. وبالتالي فإننا قبل أن نضع خاصية selected على أي من الخيارات، نحتاج إضافة شرط تطابق قيمة الخيار مع حالة المستخدم: <select name="userStatus"> <option value="startup" @if($user->status == 'startup') selected @endif>شركة ناشئة</option> <option value="freelancer" @if($user->status == 'freelancer') selected @endif>عامل حر</option> </select> وهذا ببساطة إستعمال من بين العديد من الإستعمالات التي تجهمعها الشيفرة الموضحة. في حالة ما أردت القيام بذلك بـ PHP فقط فيمكنك كاقتراح عمل ثلاث صفحات تحتوي ثلاث نماذج حيث: الصفحة الأولى تحوي نموذجا يتم من عليه اختيار نوع العميل. تستقبل الصفحة الثانية خرج الصفحة الأولى وتقوم بعرض القائمة المنسدلة التالية: @foreach ($formhandler['guest_form_types[citizen]'] as $guest_type => $value) echo '<option value=' {{$guest_type}} '>' {{$value}} '</option>' @endforeach تستقبل الصفحة الثالثة خرج الصفحة الثانية وتقوم بعرض حقلي جواز السفر ورقم التأشيرة بناء على النتيجة المستقبلة.
- 3 اجابة
-
- 1
-
-
يعتبر كل من اللواحق المضافة للأوامر خيارات يتم تطبيقها أثناء تنفيذ الأمر. ومن بين الخيارات التي يقبلها الأمران: php artisan make:model ModelName الخياران policy-- و request-- حيث أن الخيار policy يقوم بإنشاء صنف سياسة policy جديد. السياسات هي تصنيفات تنظم منطق الترخيص حول نموذج أو مورد معين. على سبيل المثال، إذا كان تطبيقك عبارة عن مدونة، فقد يكون لديك نموذج منشور Post وسياسة PostPolicy مقابلة لترخيص عمليات المستخدم مثل إنشاء أو تحديث المنشورات، حيث يحوي هذا الصنف كامل عمليات الترخيص بشأن كل تابع أو كل وظيفة. مبدئيا ، يمكن إنشاء سياسة ما عن طريق الأمر: php artisan make:policy PostPolicy أو يمكن ربطها بملف النموذج عن طريق الأمر: php artisan make:policy PostPolicy --model=Post أو عن طريق إضافتها كلاحقة خيار في أمر إنشاء النموذج: php artisan make:model ModelName --policy ليقوم هذا بإنشاء صنف نموذج وصنف سياسة مقابل له. الخيار الآخر الذي يقبله أمر إنشاء النموذج هو خيار requests-- . يتم عن طريق تخصيص هذا الخيار إنشاء صنفي طلبيات Request يخصان عملية التحديث والإنشاء بداخل مجلد app\requests. أصناف الطلبيات في لارافيل هي نسخ عن الصنف Request قابلة للتخصيص تحتوي على منطق يمكن عن طريقه التحقق من سلامة الطلبيات وتوثيقها. يمكنك التعرف أكثر عن الطلبيات في: قد تحتاج مراجعة التحقق في لارافيل > التحقّق من صحّة طلب استمارة > إنشاء طلبات الاستمارة. و الترخيص في لارافيل > إنشاء السياسات.
- 1 جواب
-
- 1
-
-
يتحكم في هذا هيكلية قواعد بياناتك بالدرجة الأولى، ولكن بشكل عام يمكنك إستعمال هاته الدالة في أي استعلام بمجرد تضمينها بشكل عادي: SELECT class, [dbo].[udf_convert_int_date](YOUR_INTEGER_COLUMN), teacher FROM teachers يمكنك إستعمالها في إستعلامات JOIN أو INSERT أو غيرها، كما يمكنك تخصيص اسم الدالة وتسميتها وفق ما يوافقك.
-
لعلك لم تنتبه إلى أحد الأوامر المهمة في لارافيل أثناء استعراض الأوامر التي يوفرها artisan عن طريق طباعة. php artrisan هذا الأمر هو: php artisan make:request CustomRequest إذ يتيح هذا الأمر إمكانية إنشاء صنف يرث Request ويحمل صفاته الأساسية ويوفر إماكانية تغيير أشياء من مثل قواعد التحقق Validation أو غيرها. وهو أحد الأمور التي أحب العمل بها في لارافيل. يقوم الأمر php artisan make:request CustomRequest بإنشاء ملف CustomRequest.php داخل app\http\requests، يحمل افتراضا: تابعا rules يقوم بإعادة مصفوفة بكامل قواعد التحقق validation بشأن طلبية Http /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ ]; } تابعا authorize يقوم بتحديد ما ان كان من المسموح قبول هاته الطلبية: /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return false; } نقوم بتضمين هذا الصنف في أحد ملفات المتحكمات كالتالي: use App\Http\Requests\CustomRequest; ثم نقوم بإستقبال نموذج عنه في التابع المستهدف بطلبية ما، مثال: إذا كان الرابط: POST http://path.to/api/users يستهدف التابع store من المتحكم UserController بطلبية Http، فإن هذا التابع يستقبل معاملا request من الصنف CustomRequest كالتالي: public function store(CustomRequest $request){ } ثم سيمكن إستعمال أي من الخواص أو التوابع التي يقدمها الصنف مباشرة. ولنقل أننا نريد استخراج البيانات المتحقق منها من الطلب فقط: public function store(CustomRequest $request){ $data = $request->validated(); } في حين أن CustomRequest هو من سيضم قواعد التحقق كالتالي: public function rules(){ return [ 'username' => 'required|max:8', 'password' => 'required|min:10', 'extra_data' => 'nullable', ]; } أليست الفكرة أفضل من هذا الشكل: public function store(Request $request){ $data = $request->validate([ 'username' => 'required|max:8', 'password' => 'required|min:10', 'extra_data' => 'nullable', ]); } ثما ماذا لو أردنا إضافة التحقق من صلاحية المستخدم في إنشاء مورد جديد: public function store(Request $request){ if(auth()->user()->is_able_to_store_user) { $data = $request->validate([ 'username' => 'required|max:8', 'password' => 'required|min:10', 'extra_data' => 'nullable', ]); } } تخيل أن الأمر سيمتد لتصبح حتى قراءته مزعجة. فيما يلي مجموعة من الميزات التي تجعلك تنشئ أصناف طلببيات خاصة: كون الطلبيات تختلف فيما بينها يجعل الحاجة إلى معالجتها بشكل منفصل شيء مهم. يقتضي فصل الطلبيات عن المتحكمات اثنين من أهم مبادئ REST لتصميم واجهات تطبيق برمجية فعالة ومميزة. مبدأ فصل المهام الذي يقتضي فصل مكونات التطبيق عن بعضها البعض، فكل صنف أو تابع يجب أن يحوي وظيفة واحدة. وفكرة أن تابعا ما يقوم هو بعملية التحقق والتوثيق والإستعلام من قواعد البيانات والرد فكرة غير محببة كثيرة ويتطلب فصل مكوناتها.. هذا وبجانب أنه يحترم أيضا مبدأ نظام الوسطاء بتوسطه بين طلبية العميل وواجهة المتحكم وعدم تركهما يتفاعلان بصفة مباشرة. يحقق إستعمال أصناف طلبيات مخصصة الكثير من مبادئ الشيفرة النظيفة التي تجعل الشيفرة الخاصة بك قابلة للقراءة والتعديل والتخصيص على شكل واسع. يقوم إنشاء طلبيات مخصصة بإتاحة إمكانية جعل جميع الوظائف المماثلة تستند إلى نفس قواعد التحقق والتوثيق الخاصة بطلب واحد، وذلك بدلا عن إنشاء واحد لكل منها. بمعنى، أنه لو كنا نقوم بإنشاء مستخدم جديد في التابع store الخاص بالمتحكم UserController وأيضا في التابع store للمتحكم AdminController وتابع آخر في متحكم آخر، سيصبح لدينا الكثير من الشيفرة المتشابهة والمكررة في كل منها، فسنحتاج أن نكتب قواعد التحقق لكل تابع في كل متحكم، وأن نتحقق من صلاحية الطلبية في كل تابع من كل متحكم وهكذا.. هذا بجانب أن الأمر يصبح صعب التعديل لاحقا، ماذا لو قمت بإضافة عمود جديد في قواعد البيانات وأردت تعميم قاعدة التحقق الخاصة به على كامل الطلبات؟ بدلا عن كل هذا يتيح إنشاء صنف مخصص توحيد كل تفاصيل هاته الطلبيات. وبدل أن تبدوا متحكماتك كالتالي: public function update(Request $request, User $user){ if(auth()->user()->is_able_to_update_user){ $validator = Validator::make($request->all(), [ 'username' => 'required|max:8', 'password' => 'required|min:10', 'extra_data' => 'nullable', ]); if($validator->fails()) { return back()->withErrors($validator); }else{ $data = $validator->validated(); $user->update($data); return back()->with('success' ,'تم !'); } }else{ return back()->with('unauthorized' ,'غير مسموح لك !'); } } ستبدوا كـ: public function update(UpdateUserRequest $request, User $user){ $user->update( $request->validated() ); return back()->with('success' ,'تم !'); } مقسمة إلى: // UpdateUserRequest.php <?php /** * Determine if the user is authorized to make this request. * * @return bool */ public function authorize() { return auth()->user()->is_able_to_update_user; } /** * Get the validation rules that apply to the request. * * @return array */ public function rules() { return [ 'username' => 'required|max:8', 'password' => 'required|min:10', 'extra_data' => 'nullable', ]; } وهذا ما تم العمل به في المقال الذي قمت بإرفاقه، وبالتالي فإن عليك بدل تضمين كامل الواجهات التي يقوم صاحب المقال بتضمينها أن تقوم بإنشاء صنف Request المخصص الخاص بك وإستدعاءه متى طلبت الحاجة. تتحدث هاته المقالة عن أفضل التطبيقات وأساسيات التحقق من المدخلات في لارافيل، يوجد من بينها طريقة إنشاء أصناف طلبيات مخصصة: كما يمكنك الإطلاع على التوثيق الرسمي لكامل ما يخص التحقق في لارافيل هنا.
- 1 جواب
-
- 2
-
-
بشكل عام، يمكنك تحويل أعداد صحيحة كالتالي: 20100101 إلى تواريخ datetime وفق الدالة CONVERT التي تي توفرها SQL ، يكون ذلك في إستعلام SQL مثلا كالتالي : select CONVERT (datetime,20100101) كما يمكن استخدامها مع أي استعلام آخر، حيث تقبل كمعاملين: ثابت التحويل (يبقى datetime في حالة التحويل إلى تاريخ) والمعامل الثاني العدد الصحيح. بالإضافة إلى معامل ثالث يعبر عن نمط التاريخ مضبوط افتراضيا. الشكل العام للدالة: CONVERT(datetime, <string parameter>, styleFormat) سنقوم بإختيار رمز التنسيق الأبسط والأكثر شيوعا: mm/dd/yyyy المعبر عنه بالعدد 101. يمكنك توظيف هاته الدالة في استعلام SELECT آخر لجلب اسم القسم واسم المدير: CREATE FUNCTION udf_convert_int_date (@my_integer INT) RETURNS datetime AS BEGIN DECLARE @receving_date datetime SET @receving_date = CONVERT(datetime, CAST(@my_integer AS CHAR(8)), 101) RETURN @receving_date END
-
كطريقة منظمة أكثر يمكنك إنشاء صنف مساعد بداخل مجلد تنشئه وليكن Helpers داخل App، يقوم هذا الصنف بتوفير تابع يوفر هاته الخدمة ومن ثم بإستدعاء بسيط سيمكن إستدعاءه و العمل عليه في أي مكان في تطبيقك. ليحتوي الملف الشيفرة التالية: <?php namespace App\Helpers; class CountriesHelper{ public static function get() { $filepath = 'path/to/file'; return file_get_contents($filepath); } } لنقم بتسجيل alias لهذا الصنف في ملف app.php في مصفوفة aliases كالتالي: <?php 'aliases' => [ 'Countries' => App\Helpers\CountriesHelper::class, ] يكون الإستدعاء والإستعمال كالتالي: <?php use Countries; ... public function someMethod() { $countries = Countries::get(); } أو في أحد ملفات العرض لخدمة غرضك مثلا كالتالي: <select name="nationalty" id=""> @foreach(\Countries::get() as $country) <option value="{{$country}}">{{$country}}</option> @endforeach </select>
- 3 اجابة
-
- 1
-
-
الأصح ليس تقسيم هاته العناوين أو هؤلاء الزوار على الدول، بل هو في استخراج الدول من عناوين الأيبيهات السابقة وحساب تكرار كل منها. أي أن العملية ستتبع المنطق التالي: نقوم بتحضير استعلام تحديد لعناوين أيبيهات الزوار. جلب اسم الدولة المعبر عن كل عنوان IP. تخزين الناتج في مصفوفة. حساب تكرار كل قيمة من المصفوفة (يمكنك إستعمال الدالة array_count_values في PHP). <?php $arr = ['algeria' ,'egybt' ,'ghana' ,'egybt']; print_r(array_count_values($arr)); // Array ( [algeria] => 1 [egybt] => 2 [ghana] => 1 ) تأكد من تتبع هاته الخطوات وخرج كل خطوة لربطها بالتي بعدها على نحو صحيح. توثيق الدالة array_count_values.
-
يمكنك الاستفادة من هاته الإجابات على سؤال سابق لك
- 9 اجابة
-
- 1
-
-
العناصر التي ذكرتها لم يأت بها لارافيل أو اخترعها، بل قد كانت مجموعة مفاهيم تقنية شائعة جمعها ولخصها و جاء بها كمميزات، فلارافيل ليس إلا مجموعة شيفرات جاهزة تجعل التطوير عليه أسهل وأكثر وضوحا مما هو عليه في PHP بتوفير مجموعات من الأصناف والتوابع والمساعدات والملفات التي تخدم غرضا أو مفهوما معينا، وفيما يأتي مجموعة المفاهيم الأساسية: التهجير بشكلها العام تعرف عمليات تهجير قواعد البيانات على أنها عملية ترحيل البيانات من قاعدة بيانات مصدر واحدة أو أكثر إلى قاعدة بيانات هدف واحدة أو أكثر. فعند الانتهاء من هذا الترحيل ، تتواجد مجموعة البيانات في قواعد البيانات المصدر بالكامل على الرغم من نشاطها في القاعدة الهدف. وعلى الرغم من احتمال إعادة هيكلتها في قواعد البيانات الهدف. لارافيل هو نفسه أيضا يستعمل هذا المفهوم ويقوم بتوفير طريقة لإنشاء هياكل قاعدة بيانات مصدر وبأمر بسيط ترحيلها إلى قاعدة بيانات هدف والحفاظ على هيكلة قواعد البيانات الأساسية. تشبه عمليات التهجير في لاراففيل نظم التحكم في الإصدار لقاعدة البيانات الخاصة بك، بشكل يجعل فريق قادرا على تعديل مخطط قاعدة بيانات التطبيق ومشاركته بكل سهولة. فلو أردت مثلا بعد عام من نشاط موقعك من إضافة عمود إلى جدول المستخدمين سيمكنك إنشاء ملف تهجير جديد. النموذج Model ، العرض View و المتحكم Controller يعرف نمط الـ MVC كنمط تصميم Design Pattern، أي أنه أقرب الى أن يكون اسلوب برمجة وليس برمجة في حد ذاتها، ينطلق من مبدأ فصل المهام concerns separation ليقوم بفصل كل من: مكونات النموذج Model: تضم كل المنطق المتعلق بالبيانات الذي يعمل به المستخدم وتفاعلها معها. على سبيل المثال ، استرداد البيانات من قاعدة البيانات ، ومعالجتها وتحديثها. مكونات العرض View: وهي مجموع المكونات التي يتم فيها تمثيل البيانات وعرضها للمستخدم والتفاعل معها. مكونات المتحكم Controller: وحدات التحكم كواجهة بين مكونات النموذج والعرض لمعالجة جميع الطلبات الواردة ، توثيقها وفحصها. ومعالجة البيانات باستخدام مكون النموذج والتفاعل مع طرق العرض لتقديم الخرج النهائي، أي أنها المكون الأساسي في العملية فهي المنسق بين مكونات العرض و النماذج. لارافيل يستعمل هذا النمط في تفصيل اهتماماته أيضا، ويوفر لنا ثلاث أنواع من المكونات تتكامل فيما بينها. التوجيه Routing بشكل عام، التوجيه هو عملية تحديد المسار في شبكة أو بين شبكات متعددة أو عبرها. والتوجيه في لارافيل هو ليس إلا طريقة تسمح لك بتوجيه جميع طلبات التطبيق إلى وحدة التحكم المناسبة لكل طلب.
- 2 اجابة
-
- 1
-
-
بجانب إعطاء المعامل قيمة افتراضية في تعريفه ضمن الدالة سيكون عليك إما عدم تمريره في حالة كون ترتيب هذا المعامل الأخير وإلا فسيمكنك تمرير undefined ليتم اعتبار القيمة الافتراضية لهذا المتغير. مثال: const test = (a, b = 0, c) => { return a + b + c } الإستدعاء: const sum = test(5,undefined,10) console.log(sum) // 15 ولكن بشكل عام، يفضل لأسباب مثل المحافظة على نظافة الشيفرة وتجنب أية مشاكل يقترح جعل هاته المعاملات في آخر الترتيب مثلما أشار المدرب محمد، ولكن ان اضطررت لسبب ما لعدم ذلك فسيمكنك العمل بما تم توضيحه حول undefined. وبشكل خاص، ككتابة أفضل وإستعمال أكثر مرونة لدالة تعيد مجموع معاملات، يمكنك عن طريق بعض التتايل قبول عدد لا متناهي من المعاملات عن طريق إستعمال هاته الصيغة: function sum(...nums){} حيث سيمكن إستدعاءها كـ: sum(1,2,4) أو: sum(1,2,68,7,5,654,353,342) تستقبل الدالة sum مصفوفة من المعاملات التي يتم تمريرها عبرها. يمكننا إستعمال الدالة reduce المضمنة في جافاسكربت لإختزال هاته المعاملات في معامل واحد: function sum(...nums){ return nums.reduce((a, b) => a + b); } الناتج: sum(1,2,4) // 7 sum(1,2,68,7,5,654,353,342) // 1432 sum(1,2,68,7,5,654,353,342,63,537,3256,3561,675,647,2362) // 12533 تعرف أكثر على الدالة reduce .
-
في الغالب، ستحتاج هيكلة هاته البيانات في صفحة HTML ومن ثم تصديرها وطباعتها بصيغة PDF مثلا. كما يمكنك تصدير هاته البيانات بصيغ أخرى مثل SQL و CSV و JSON. نذكر من بين الحزم المستعملة في ذلك في لارافيل: حزمة barryvdh/laravel-dompdf، إذ توفر هاته الحزمة إمكانية تحويل ملف عرض view بسيط إلى ملف PDF و تحميله. كما توفر حزمة datatables إمكانية تقرير وتنظيم وهيكلة هاته البيانات في جداول بيانية والإستفادة من ميزة الأزرار لتوفير إمكانية لتصدير هاته البيانات بأشكال وصيغ مختلفة (PDF ,CSV ,JSON). يتم تضمين الحزمة كالتالي: تضمين ملفات التنسيقات: <link rel="stylesheet" hre="//cdn.datatables.net/1.11.3/css/jquery.dataTables.min.css"> تضمين ملف جافاسكربت الحزمة: <script src="//cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script> تهيئة الحزمة وفق خيارات أزرار التصدير: $(document).ready( function () { $('#myTable').DataTable({ buttons: [ 'copy', 'excel', 'pdf' ] }); } ); لاحظ أن الحزمة تستعمل jQuery وتتطلبها، ولذلك تأكد من تضمين ملف الجافاسكربت الخاص بمكتبة jQuery.
-
تماثل الكتابة هاته: (n === +n && n !== (n|0)) ? نفس الكتابة: if(n === +n && n !== (n|0)){ } أما عن المعاملين + و | ف: المعامل | في n|0 يستعمل بنفس غرض OR أو || ولكنه يستهدف الأعداد الصحيحة integers، فهاته الكتابة n|0 تعني قم بإعادة 0 في حالة لم يكن العدد n صحيحا integer. المعامل + في n+ فهو ليس إلا إشارة موجبة للتحقق من أن نوع n يماثل نوع n موجبا، فهاته الكتابة n+ تعني موجب n. لنقم بتجزئة الشرط حتى نقوم بفهمه جيدا: if(n === +n && n !== (n|0)) return 'double'; /*//////////////////// لشطر الأول*/ n === +n التحقق من ما ان كانت قيمة n تساوي القيمة الموجبة لـ n. فيما يعني ، أنه ان كان قيمة عددية فسيتم إعادة خطأ وإلا فإن الشرط محقق وصحيح. /*//////////////////// لشطر الثاني*/ n !== (n|0) التحقق من ما ان كان نوع n مساويا لناتج n|0 (يكون الناتج n في حالة كون n عددا صحيحا أو صفرا فيما غير ذلك). إستنتاجات: n مساو لقيمته الموجبة ===> n عدد. (مثال : 5 مساو لـ 5+ و 2.1 أيضا مساو 2.1+) n غير مساو لقيمته الموجبة ===> n ليس عددا. ("hsoub" ليس مساويا لـناتج "hsoub"+ والتي هي NaN). نوع n مساو لناتج n|0 (تذكر: n أو صفر) ===> n عدد صحيح integer. (مثال: 5 مساو لـ ناتج 0|5 والذي هو 5 لأن هذا الأخير صحيح). نوع n غير مساو لناتج n|0 (تذكر: n أو صفر) ===> n عدد عشري double. (مثال: 2.1 غير مساو لناتج 0|2.1 والذي هو 0 لأن هذا الأخير عشري).
- 3 اجابة
-
- 1
-