-
المساهمات
88 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
2
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
أجوبة بواسطة Waleed Alfakiat
-
-
يوجد العديد من مزودي خدمات الاستضافة المجانية ولكن لكل منها مزاياها وعيوبها:
ففي 000webhost يتيح لك موقع واحد مجاني وحجم محدود لرفع الملفات.
ولكن في Ebehost يتيح لك دومين فرعي مجاني ومساحة غير محددة بالإضافة لعدة ميزات يمكنك استخدامها مثل Softaculous ولوحة تحكم cPanel
-
تتكون لغات البرمجة من عدة تعليمات برمجية يتم تنفيذها خلال عمل البرنامج ويجب الفصل بين هذه التعليمات بإشارة يفهمها المُترجم الخاص بالغة البرمجة
فمثلًا في لغات البرمجة PHP, Java, C++ نستخدم الفاصلة المنقوطة :
print(""); print("") ^
للفصل بين التعليمات البرمجية.
وفي لغة Python يتم كتابة كل أمر في سطر منفصل, هكذا:
print("") print("")
ولأنّ لغة PHP تفصل بين التعليمات بفاصلة منقوطة ( ; ) وجب الفصل بين التعليمات في السطر رقم 30 والسطر رقم 34 بفاصلة منقوطة
-
تُقسم برمجة الويب إلى قسمين:
- تصميم واجهات المستخدم
- برمجة Back-end
أنت الآن تقف في القسم الأول وهو تصميم واجهات المستخدم, حيث يحتوي هذا القسم على الصور والأيقونات والنصوص التي يشاهدها المستخدم, وتقوم بعرضها بشكل ثابت ومباشر.
للإنتقال إلى القسم الثاني, تحتاج إلى لغة برمجة لإنعاش روح الموقع, ومن هذه اللغات (PHP, C#, Java)
تحيث تقوم لغات البرمجة على التحكم بالمدخلات من المستخدم وعرض نتائج على شكل تصاميم ونصوص سَبَقَ وأن تم تصميمها في المرحلة الأولى
-
نقوم بالوصول لملفات blade باستدعائها باسم المسار كاملًا
فعندما يكون الملف بداخل مجلد posts
بتاريخ On 4/8/2021 at 05:00 قال معتز المشكلي:يكون الاستدعاء بالوصول إلى مجلد posts ثم اسم ملف blade المطلوب, هكذا:
@extends('posts.layout')
وكذلك الأمر ينطبق عندما يكون في مجلد آخر
بتاريخ On 4/8/2021 at 05:00 قال معتز المشكلي:يتم استدعاؤه بالاعتماد على المجلد الخارجي, هكذا:
@extends('component.layout')
-
يمكنك الاطلاع على هذا الحل باستخدام Laravel
حيث يمكنك تشغيل البرنامج والوصول إليه من الأجهزة الأخرى داخل الشبكة (Local Network) دون الحاجة لوجود استضافة خارجية
-
بتاريخ On 4/5/2021 at 00:01 قال عبود سمير:
لاحظ كتابتك للكلمة Dashboard تأكد أن المُجلد إسمه Dashbaord و ليس Dashboard أعتقد أن هذا هو السبب و بالتالي يُصبح:
بالإضافة لما قاله المدرب@عبود سمير:
يظهر الخطأ
بتاريخ On 4/5/2021 at 00:00 قال كمال محمودي:[ErrorException] require(D:\xampp\htdocs\app\vendor\composer/../../app/Helpers/Dashbaord/profitCalculation.php): failed to open stream: No such file or directory
بسبب عدم الوصول إلى الملف المحدد وذلك:
- إمّا أنّ الملف غير موجود
- أو أنّ مسار الملف خاطئ
وللتأكد من مسار الملف نستخدم عدة طرق للكشف عنها
1. الطريقة الأولى: التأكد من صحة المسار النسبي والمسار المطلق
فمثلًا لدينا هذه الملفات في موقع ما
www.sample.com/ |- images/ | |--- image1.png | |--- image2.png | |--- image3.png | |- assest/ | |--- style.css | |--- comp.js | |- core/ | |--- core.php | |- index.php
ونحن الآن في ملف core.php ونريد استدعاء الصورة image1.png, فكيف يتم استدعاؤها ؟
في المسار النسبي: يتم استدعاء مسار الصورة نسبةً للملف الذي نقف عليه, فيصبح مسار الاستدعاء هكذا:
"../images/image1.png"
وفي المسار المطلق: يكون الاستدعاء عن طريق مسار كاملًا بدءً من رابط الموقع وصولًا إلى الملف الهدف, فيصبح مسار الاستدعاء هكذا:
"http://www.sample.com/images/image1.png"
فيرجى التأكد من الطريقة المُتَّبعة في استدعاء المسار تحديدًا عند نقل الملفات من مكان لآخر
2. الطريقة الثانية: التأكد من إعدادات PHP
قد يكون تضمين الملفات عن طريق URL في PHP متوقفًا ولتفعيل هذا الخيار, نقوم باستدعاء الدالة:
ini_set("allow_url_include", "1")
والخيار allow_url_include هو المسؤول عن إتاحة تضمين الملفات عن طريق URL أو أيقافها, لذلك نقوم بتفعيل هذا الخيار
- 1
-
تتيح Laravel العمل إنشاء الجداول في قاعدة البيانات مع المرونة في تعديلها في وقت لاحق عن طريق التهجير مرة أخرى
فعند القيام بإنشاء جدول نقوم بكتابة الأمر التالي:
php artisan make:migration file_migration_name --create table_name ^^^^^^
حيث أنّ الأمر:
--create
يعني أن ملف التهجير الجديد يعمل على إنشاء جدول باسم "table_name"
ماذا لو أردنا التعديل على جدول حالي ؟
ببساطة: نقوم بتعديل الأمر من (--create) إلى (--table) وتمرير اسم الجدول الحالي المُراد تعديله
فيصبح هكذا:
php artisan make:migration file_migration_name --table table_name ^^^^^
وبداخل الملف نضع التعديلات
public function up() { Schema::table('posts', function($table) { $table->integer('new_col'); ... }); }
ونضع كود rollback في الدالة down وهي الجزئية الخاصة بحذف الحقل عند تنفيذ أمر التراجع
public function down() { Schema::table('posts', function($table) { $table->dropColumn('new_col'); }); }
ولكن بعد تنفيذ أمر التهجير
php artisan migrate
لا يمكن التعديل على الملف السابق, بل نقوم بإنشاء ملف تهجير جديد ونكرر ما فعلناه
-
يمكنك إضافة زر مشاركة عن طريق التوجيه لتطبيق واتس آب وإرفاق النص
whatsapp://send?text=النص
فيصبح الرابط كالآتي:
<a href="whatsapp://send?text=النص">WhatsApp</a>
-
بتاريخ 1 دقيقة مضت قال علي العبدالله:
ماذا عن ملف resources/css ?
انت تقوم بوضع ملف css في الملف الرئيسي حتى تستطيع الوصول إليهم بشكل مباشر
-
نقوم بانشاء ملف css في public باسم
styles.css
واستدعائه في view
<link rel="stylesheet" href="styles.css">
-
يشير الرمز 5xx عادة إلى أخطاء البرنامج, ومن هذه الأخطاء:
إصدار php في الخادم, غير متوافق مع إصدار php الذي كُتب به البرنامج
فمثلًا: تم برمجة النظام باستخدام اصدار php7 ورفعه على الخادم الذي يعمل على إصدار php5
وفي هذه الحالة: يجب تغيير اصدار الخادم وتغييره لاصدار 7
أخطاء في ترجمة الكود المصدري:
في بعض الحالات يقوم المترجم الموجود في الجهاز بالتعرف على رموز php مثل
<? // البرنامج هنا ?>
ولكن المترجم الموجود في الاستضافة لا يتعرف على رموز php إلا هكذا
<?php // البرنامج هنا ?>
هذه من أبرز المشاكل التي كانت سبب في ظهور الخطأ 5xx
-
عند استخدام الدالة get() للحصول على البيانات, يتم ارجاع collection تحتوي كائنات لجميع السجلات التي تم استخراجها من قاعدة البيانات ولقراءة هذه الكائنات نقوم بعمل تكرار للوصول للبيانات, مثال:
@foreach ($collection as $object) {{ $object->title }} @endforeach
أو الحصول على قيمة عن طريق index محدد هكذا:
{{ $collection[0]->title }}
أو الحصول على أول كائن:
{{ $collection->first()->title }}
ولكن عند استعمال
find() أو first() Page::find('page', 'about-me');
يتم ارجاع كائن واحد فقط وعندها يمكنك قراءة محتوياته بشكل مباشر
{{ $page->title }}
- 1
-
عند تنفيذ أمر تهجير البيانات
php artisan migrate
نقوم بإضافة الأمر التالي إليها:
--pretend
وهذا المسؤول عن طباعة أوامر SQL في terminal التي تم تنفيذها لتهجير البيانات إلى قاعدة البيانات
فيصبح الأمر هكذا:
php artisan migrate --pretend
والنتيجة تظهر في terminal:
Migration table created successfully. CreateUsersTable: create table "users" … CreateUsersTable: create unique index … CreatePasswordResetsTable: create table "password_resets" … CreatePasswordResetsTable: create index password_resets_email_index … CreatePasswordResetsTable: create index password_resets_token_index …
ولحفظ النتيجة في ملف migrate.sql نقوم بتوجيه المخرجات من terminal إلى الملف المحدد بإضافة الأمر:
> migrate.sql
ولكن يتم حفظ المخرجات SQL مع زوائد إضافية مثل ("CreateUsersTable: " و "CreatePasswordResetsTable: ") كما ظهرت في Terminal
ولفلترة النتائج من هذه الزوائد نقوم باستدعاء الأمر:
--no-ansi
المسؤول عن عدم طباعة هذه الزوائد عن أوامر SQL
بذلك يكون لدينا المخرجات عبارة عن أوامر SQL فقط ويتم حفظها في ملف migrate.sql من خلال الأمر:
php artisan migrate --pretend --no-ansi > migrate.sql
- 1
-
يظهر هذا الخطأ بسبب أن القيمة null وهذا لا يُطبّق عليها الشرط string
لأنّ null تعني بأنّه لا توجد قيمة أساسًا, وفي حالة عدم وجود قيمة فلا يمكننا اعتبارها string فيحصل الخطأ عند التحقق من صحتها
لذلك يجب وضع قاعدة:
'nullable'
في التحقق ليصبح هكذا:
'firstName' => 'string|max:255|nullable', 'lastName' => 'string|max:255|nullable'
وبهذا يتم قبول القيمة إذا كانت خالية
- 1
-
بما أنّ البيانات على شكل JSON يجب أولًا قراءة محتوياتها لتتمكن Laravel من التعامل معها
وذلك باستخدام الدالة:
json_decode($data);
التي تقوم بتحويل شكل البيانات من JSON إلى مصفوفة
بعد ذلك نمررها إلى validate ونطبق القواعد على البيانات
use Validator; public function store(Request $request) { $data = json_decode($request->payload, true); $rules = [ 'name' => 'digits:8', 'age' => 'digits:8' ]; $validator = Validator::make($data, $rules); if ($validator->passes()) { // الاجراءات عند عدم صحة البيانات } else { // الاجراءات عند نجاح عملية التحقق } }
ولكن يجب أن نتذكر بأن القاعدة digits
تقوم بالتحقق من أن القيم عبارة عن أرقام, ويجب ان نمرر لها عدد الخانات المسموح بها فتصبح هكذا:
digits:8
- 1
-
تحتاج إلى تحديد اصدار React الخاص بـ react-hot-dom في ملف الحزم package
"@hot-loader/react-dom": "{الاصدار الحالي}",
وبعد ذلك تقوم بإضافته في webpack config
alias: { 'react-dom': '@hot-loader/react-dom' }
حتى يتم الحصول على الاصدارات المناسبة للمكتبات بما يتناسب مع اصدار React الخاص بك
- 1
-
تتيح الدالة validate تخصيص رسائل محددة
فتقوم باستقبال ثلاثة متغيرات هكذا:
$this->validate($request, $rules, $customMessages);
$request: وهو الطلب الذي يحتوي على القيم المراد التحقق من صحتها
$rules: وتحتوي على مجموعة القواعد التي سيتم تطبيقها على المدخلات
$customMessages: وهو اختياري, نقوم بتمرير الرسائل المخصصة للأخطاء مثل:
'required' =>' الحقل :attribute مطلوب.'
حيث أنّ
:attribute
يتم تعويضها تلقائيًا باسم الحقل
فيصبح البرنامج هكذا:
$rules = [ 'name' => 'required', 'email' => 'required|email', 'message' => 'required|max:250', ]; $customMessages = [ 'required' => ' الحقل :attribute مطلوب.', ]; $this->validate($request, $rules, $customMessages);
- 1
-
يمكنك استخدام Middleware يتحقق من صلاحية المستخدم والتحكم بإعادة التوجيه وتطبيقه على routes التي تريدها
بدايةً نقوم بإنشاء middleware باسم AdminMiddleware عن طريق الأمر:
php artisan make:middleware AdminMiddleware ^^^^^^^^^^^^^^^ اسم ملف middleware
وبداخله نقوم بالتحقق من امتلاك المستخدم لصلاحية admin والسماح له بالمرور, وغير ذلك نقوم بإعادة توجيهه إلى الخطأ 403
namespace App\Http\Middleware; use Auth; ... class AdminMiddleware { public function handle($request, Closure $next){ if (Auth::user()->type !== "admin") { // إن كان المستخدم لا غير مصرح له بالدخول abort(403, 'Unauthorized action.'); // توليد الخطأ 403 } return $next($request); // غير ذلك نقوم بالسماح له بالمرور } }
ولا ننسى استدعاء
use Auth;
للوصول لبيانات المستخدم
بعد ذلك: نقوم بتسجيل AdminMiddleware ضمن قائمة الـ middleware لنتمكن من استدعائه مباشرة عن طريق الاسم, وذلك في ملف Kernel.php بداخل المسار:
app\Http\Kernel.php:
نبحث عن $routeMiddleware ونضيف بداخله مسار AdminMiddleware والاسم المستعار الذي سنستخدمه في routes
... protected $routeMiddleware = [ ... 'admin' => 'App\Http\Middleware\AdminMiddleware', ]; ...
وبهذا نكون قد سجلنا AdminMiddleware باسم admin
ونقوم بتطبيقه على routes المحددة كمجموعة
Route::group(['middleware' => ['auth', 'admin']], function() { Route::get('report','ReportController@index'); Route::get('report/create', array('as'=>'report.create', 'uses'=>'ReportController@create')); ... });
- 1
-
بتاريخ 9 ساعات قال عبود سمير:
return [ ... 'temporary_file_upload' => [ ... 'rules' => 'file|mimes:png,jpg,pdf|max:102400', // (100MB max, and only pngs, jpegs, and pdfs.) ... ], ];
ويمكنك أيضًا التحقق من حجم الملفات المسموح رفعها عن طريق إعدادات php
من خلال ملف php.ini (يمكنك البحث عنه من خلال اداة البحث في شريط المهام)
وتحديد حجم الملف في خيار upload_max_filesize
... ; Maximum allowed size for uploaded files. ; http://php.net/upload-max-filesize upload_max_filesize = 2M // حجم الملف المسموح رفع ...
-
بدايةً قم بإنشاء ملف تهجير بيانات لتعديل الجدول الحالي ونسميه مثلًا "update_foreign"
عن طريق الأمر التالي:
php artisan make:migration update_foreign --table table_one
حيث أنّ:
اقتباسupdate_foreign: اسم ملف التهجير
--table table_one: إشارة لاسم الجدول الحالي المراد تعديله
وفي داخل الملف نقوم بحذف قيد foreign key ومن ثمّ إضافة القيود الجديدة على الحقل كما هو مطلوب:
public function up() { Schema::table('table_one', function (Blueprint $table) { $table->dropForeign(['table_two_id']); // حذف القيد السابق $table->foreign('table_two_id') // إضافة القيد الجديد ->references('id') ->on('table_two') ->onDelete('cascade'); }); }
بعد ذلك نقوم بتهجير البيانات من خلال الأمر:
php artisan migrate
- 1
-
تدعم Laravel معرفة عناوين البريد الإلكتروني التي فشلت إرسال رسائل لهم عن طريق الدالة
failures();
التابعة للكائن
Mail
فيتم استدعاؤها بعد إرسال البريد الإلكتروني هكذا:
public function sendMail(Request $request) { $data = $request->all(); $messageBody = $this->getMessageBody($data); Mail::raw($messageBody, function ($message) { ... }); if (Mail::failures()) { // التحقق من نجاح العملية // الاجراءات عند فشل إرسال الرسالة } return redirect()->back(); }
- 1
-
يقوم Laravel بتخزين نسخة من ملفات blade التي تمت ترجمتها إلى PHP مؤقتًا لتسريع عمليات التنفيذ
وفي كل مرة يتم التعديل على ملف Blade قد لا يتم تحديث النسخة المترجمة المؤقتة
لذلك يجب حذف الملفات المؤقتة حتى يتم عرض آخر تحديث من ملفات Blade
مسار الملفات المؤقتة:
storage/framework/views
- 1
-
قد تحدث أخطاء أثناء الاستعلام من قواعد البيانات ومنها:
- لا توجد بيانات مطابقة للاستعلام
- خطأ بالاتصال بقاعدة البيانات, وما إلى ذلك
ولا يمكن قراءة البيانات عند حدوث مثل هذه الأخطاء:
بتاريخ 43 دقائق مضت قال Mohammad Yousef3:$row = mysql_fetch_array($result)
لذلك يجب التأكد من أنّ قيمة $result ليست false, وبذلك يمكن قراءة نتيجة الاستعلام
$username = $_POST['username']; $password = $_POST['password']; $result = mysql_query("SELECT * FROM Users WHERE UserName LIKE $username"); if($result === FALSE) { die(mysql_error()); // اجراءات عند حدوث مشاكل في الاستعلام } while($row = mysql_fetch_array($result)) { echo $row['FirstName']; }
- 1
-
يمكنك استدعاء الدالة
->orderBy()
أكثر من مرة كما تشاء لترتيب السجلات, هكذا:
User::orderBy('name', 'DESC') ->orderBy('email', 'ASC') ->get();
وفي كل مرة تحدد حقل معين وتحدد معه طريقة الترتيب (تنازلي / تصاعدي)
وتكون مكافئة لعمل هذا الأمر:
SELECT * FROM `users` ORDER BY `name` DESC, `email` ASC
- 2
مشكله نماذج لاافل
في أسئلة البرمجة
نشر · تم التعديل في بواسطة Alfakiat
عند استخدام Route::resource لتعريف الموجهات يتم تعريفها لتستقبل
GET, POST, PUT, DELETE
https://i.suar.me/NG96V/l
فبهذا الشكل لا يمكن تعريف التوجيه مرة أخرى بهذا الشكل
وإنّما نكتفي بـ Route::resource فقط