ما هو Laravel لارافل ؟ تعرف على أهم اطار عمل للغة PHP

ما هو Laravel لارافل ؟ تعرف على أهم اطار عمل للغة PHP

مقدمة

في عالم الويب شديد التنافسية , ان كنت فعلاً تريد البقاء فعليك اذاً دائماً تطوير مهاراتك , لم يعد عالم برمجة الويب مكاناً للمبرمجين الحقيقيين فقط , و لنكن واقعيين للحظة هنا , لقد أصبح اي مستجد في عالم البرمجة يبحث عن عمل في مجال الويب ويبدأ تعلم الويب , ربما لأنه الأسهل او لأن الطلب عليه كبير , بكلا الحالتين خلق هذه الأمر حالة حرب مستمرة بين المنافسين , ولتكون انت الطرف القوي عليك اذاً بالأسلحة القوية , أعرفك اليوم على Laravel لارافل , ربما يكون قد تعدى مرحلة القنبلة الذرية كما ذكرنا في مقال سابق عن محرك Sass ل Css , من الواضح اننا اليوم نتحدث عن القنبلة الهيدروجينية الخاصة ب PHP ! 

ما هو لارافل Laravel ؟

ببساطة , لارافل Laravel هو اطار عمل خاص بلغة php سيجعلك تقع حرفياً في حب هذه اللغة حتى وان كنت مصمم في الاساس , يقدم لارافل بيئة عمل متكاملة لكل ما تحتاجه او قد تحتاجه في اي فترة مستقبلية من حياتك المهنية , لارافل Laravel مبني على طريقة MVC الشهيرة التي تفصل ال MODEL عن VIEW عن CONTROLLER , مما يوفر لك بيئة عمل سلسة وسهلة , وربما لحد الآن لم تستطع استيعاب ماهية لارافل Laravel تماماً , لا داع للقلق فالسطور القادمة كفيلة بمساعدتك للدخول الى بداية مشوارك في تعلم لارفل Laravel.

سنقدم في هذه المقالة المطولة تفاصيل كثيرة عن اطار العمل الكبير هذا , لذلك , نأمل عند انتهائك من قراءة هذه المقال ستجد نفسك على دراية واسعة بلارافل وستجد الطريق بدأ أمامك للبحث عن دورات تعليمية.

لم علي الاهتمام بتعلم لارافل Laravel ؟

لنطرح الأمر على شكل نقاط , ومن ثم نناقشها واحدة تلو الأخرى سنبدأ بأهم ميزة , لم سمينا لارافل أنه أفضل اطار عمل php ؟

واسع الانتشار

اطار عمل لارافل Laravel هو أكثر اطر عمل php انتشاراً , وبعملية حسابية بسيطة نستنتج أن الانتشار الهائل = مصادر هائلة للتعلم , وهنا يكمن بيت القصيد في تفضيل لارافل عن غيرها من المنافسين .

السهولة

كمعظم أطر العمل التي تعتمد بنية MVC , ستجد أن المصطلح بطبيعته متقدم قليلاً فهو تقريبا المرحلة المتقدمة من OOP (البرمجة كائنية التوجه) التي سبق أن تحدثنا عنها في مقال سابق بعنوان البرمجة كائنية التوجه , المرحلة المتقدمة من معمارية البرمجة , لكن في لارافل حتى ان كنت مبتدئ في البرمجة كائنية التوجه ل php ستجد لنفسك مكان بين مبرمجي لارافل , لكن نضيف ملاحظة مهمة هنا , تعلمك لبرنامج HelloWorld في php لا يكفيك للبدء في تعلم لارافل , للأسف

بنية ملفات واضحة

بعد تخطيك الأيام الأولى في تعلم لارافل ستجد أن الملفات التي تتعامل معها لا تزيد عن 4 مجلدات يحتوي المجلد فيهم ما يقارب ال 10 ملفات (يعتمد العدد الصحيح طبعاً على نوعية موقعك) , وستجد ان التنقل بين المهام في لارافل سهل للغاية

القوة الهائلة

قد تعتقد أن مصطلح القنبلة الهيدروجينية كان مبالغاً فيه في البداية , لكن مع بعض الوقت ستجد أنني محق تماماً , انها قنبلة ساحقة لجميع المنافسين !

الأمان العالي

يمتلك اطار عمل لارافل حماية لا يستهان بها , فهو الوسيلة الأمثل لمبرمج PHP يعتبر نفسه ضعيف في الحماية , لارافل تتولى الأمر عنك !

اضافات كثيرة

يمكنك اضافة ميزات كثيرة الى لارافل عبر الاضافات الموجودة بشكل مجاني في الانترنت , الأمر الذي سيوسع مشروعك الى حدود لا يمكن لأحد تصورها

أخيراً , توثيق سهل واضح

ربما ليست ميزة تنافسية خاصة بلارافل , لكن التوثيق المقدم من موقع لارافل سهل الفهم , ربما لن تحتاج أصلاً الى أي دورات لانجاح مسيرتك المهنية في لارافل , يكفي أنك متوسط المستوى في اللغة الانجليزية وتمتلك الحماس و الجرأة للضغط على زر اطلاق القنبلة .

تنصيب لارافل على جهازك

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

composer global require laravel/installer

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

laravel new blog

هذا الأمر سيقوم بانشاء مجلد باسم Blog في المسار الحالي وانشاء مشروع لارافل فيه

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

composer create-project --prefer-dist laravel/laravel blog

والآن كل ما عليك فعله , باستخدام ال Command Line اياً كان ما تفضل استخدامه الذهاب الى المشروع عبر الأمر cd وعند وصولك اليه , كتابة الأمر التالي :

php artisan serve

وسيظهر لك رابط المشروع , قم بفتحه في متصفحك وسيظهر لك مشروعك الأول باستخدام لارافل , وغالباً ما يكون الرابط كالتالي

http://localhost:8000

http://127.0.0.1:8000

وقد يختلف الرابط بحسب نوع نظام التشغيل و ال Ports المتوفرة , لكن الرابط الذي سيظهر لك هو ما سيعمل في النهاية وسيظهر لك هذه الصفحة الرائعة.

ملاحظة مهمة : تم اطلاق الاصدار 7+ من لارافل وقد تغيرت هذه الصفحة بشكل بسيط , لن يشكل هذا الأمر فرق وليس له أي تبعات على تتمة المقال.

نتيجة بحث الصور عن ‪first page laravel 5.8 project‬‏

الخطوة الأولى : ملف الاعدادت .env

ملف اساسي لاي مشروع لارافل , ستجده في جذر المشروع باسم .env وقد يكون مخفي في انظمة لينكس او ماك , عليك بالدخول اليه وتعديله واضافة معلومات الاتصال بقواعد البيانات ان وجدت , لكن في مشروعنا الحالي لن تحتاج الى التعديل على هذه الملف حالياً , سنقوم بتعديل المعلومات اللازمة عند حديثنا عن Migrations و Models.

أنظمة لارفل , نظام التوجيهات Routing

نظام التوجيهات في لارافل بسيط وسهل بشكل لا تتخيله , سيحتاج منك تقريباً 20 ثانية لانشاء صفحة جديدة , وربما لن يزيد الأمر عن 3 دقائق لانشاء صفحة متكاملة (بدون التصميم)

جميع التوجيهات يمكنك ايجادها في المسار التالي : routes/web.php

الصيغة العامة للتوجيه في لارافل هي كالتالي :

Route::_METHOD('PAGE-LINK' , 'RESULT');

التوجيه المبسط , توجيه الى دالة function

بهذه الطريقة ستقوم باعادة التوجيه الى دالة تعيد محتوى معين , وستظهر العبارة او اياً كان نتيجة الدالة في الصفحة ففي مثالنا , عندما تفتح http://your-site.domain/page-link

سيظهر لك كلمة Hello World From Laravel , بهذه البساطة

Route::get('page-link' , function(){
   return "Hello World From Laravel";
});

كما يوجد أنواع أخرى للتوجيه , وسنقدم هنا أشهر الأنواع طبعاً والمدعومة من آخر اصدار Laravel 7

توجيه الى كونترولر

وأبسط كلمة يمكن قولها عن الكونترولور هو كلاس php يستمد العديد من خواصة من كلاس Controller الاساسي الموجود مع لارافل نفسه عند تنصيبها

Route::get('page-link' , 'C[email protected]');

أنظمة لارفل , Controllers

الكونترولور أو المتحكم باللغة العربية ان صح التعبير , هو يعتبر جوهر المشروع وقلبه النابض , في هذه الملفات يمكنك انشاء العمليات الخاصة بالمشروع وارسالها الى الصفحات التي ستظهر للمستخدم , ولانشاء كونترولور في لارافل قم باستخدام الأمر التالي في ال Command Line :

php artisan make:controller ControllerName

اذاً , أين اجد ال كونترولور في المشروع ؟ ستجد الكونترولور دائماً موجود في المسار التالي : app/Http/Controllers

وعند انشاء كونترولر يوجد نصيحة للتسمية , طبعاً يمكنك تسمية الكونترولور بما تشاء لكن الأفضل هو استخدام نظام كتابة يعتمد على اسم الكونترولور في البداية ومن ثم كلمة Controller , كمثال : AdminController وليس controllerForAdminStuff , طبعاً كلا التسميتان صحيحة , لكن ان كان هناك قواعد متعارف عليها ما المانع من اتباعها ؟

والآن بعد أن قمت بانشاء الكونترولور لنقم بعملية حسابية بسيطة فيه ...

افتح ملف الكونترولر الذي قمت بانشائه , و ضمن ال Method التي قمت بانشائها جرب كتابة الكود التالي :

return 5 + 2;

تم بنجاح , مشروعنا الان جاهز ! , لنقم باستعراضه في المتصفح عبر فتح الرابط : http://127.0.0.1:8000/count وستجد النتيجة أمامك , وملاحظة مهمة هنا , ليعمل المشروع يجب على أمر php artisan serve ان يكون عاملاً في الخلفية , لا تغلق هذا الأمر أبداً اثناء عملك على المشروع...

أنظمة لارفل , Migrations

تعتبر ال Migrations في لارافل ميزة رائعة خاصة للفرق التي تعمل على نفس المشروع , تكمن الفكرة الأساسية في ال Migration بامكانية التنسيق و التعديل , و ال Migration هي طريقة لارافل في انشاء جداول قاعدة البيانات !

قبل أن نستطيع التعامل مع قاعدة البيانات , علينا أولاً أن نخبر لارافل بمعلومات الاتصال بقاعدة البيانات . 

يتم عمل ذلك بطريقتين اما من مجلد config أو من ملف .env , في 99% من الحالات لن تضطر الى تعديل ملفات config وسيتم الاتصال عبر ملف .env و سنبدأ الآن في كتابة الكود اللازم للاتصال بقاعدة البيانات , سنفتح ملف .env ونبحث عن الأسطر التالية :

DB_CONNECTION=mysql
DB_HOST=localhost
DB_PORT=3306
DB_DATABASE=db_name
DB_USERNAME=db_username
DB_PASSWORD=db_password

قم هنا بكتابة معلومات الاتصال بقاعدة البيانات , غالباً ما يكون ال DB_HOST هو localhost , وغالباً لن تحتاج لتغيير ال DB_PORT , باقي المعلومات متغيرة حسب السيرفر الخاص بك و طريقة تنصيبه.

ملاحظة مهمة : أحياناً يتطلب مسح الكاش عن عمل أي تغييرات على ملف .env , يمكنك عمل ذلك عبر الأمر التالي في سطر الأوامر 

php artisan optimize:clear

هذا الأمر سيقوم بحذف جميع ملفات الكاش المرتبطة بال config و views.

اذاً بعد أن قمنا بالاتصال بقاعدة البيانات بنجاح , سنعمل على انشاء أول Migration لنا , والأمر التالي في سطر الأوامر سينجز المهمة :

php artisan make:migration MigrationName

جميع ال Migrations موجودة في مجلد database ومن ثم مجلد migrations , عند تنصيب لارافل لأول مرة ستجد عدد 2 Migration جاهزة مرتبطة بجدول ال Users , على كل الأحوال لنفتح ال Migration الخاصة بنا ونبدأ بتعديلها 

<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;

class CreateWithdrawHistoryTable extends Migration {

	/**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
		Schema::create('tabel_name', function(Blueprint $table)
		{
			$table->bigIncrements('id'); // Auto increment ID
			$table->timestamps(); // Default Laravel updated_at & created_at
                        $table->string('name');
		});
	}


	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
		Schema::drop('tabel_name');
	}

}

الكود السابق هو عبارة عن Migration تجريبية , ستجد أن لارافل يقوم بتجهيز معظم الأمور ويترك لك مهمة انشاء الحقول الذي تريدها , يمكن عمل ذلك ضمن ال Method المسماة up , من هناك يمكنك اضافة الحقول التي تحتاجها , يمكنك اضافة حقل من نوع varchar او date و غيره , جميع الحقول الموجودة في Mysql مدعومة تماماً في لارافل , لانشاء حقل جديد فلنكتب السطر التالي ضمن ال method المسماة up :

$table->bigIncrements('id'); // This Line is Already There
$table->string('name'); //This is Our New Line

يمكنك تصفح جميع أنواع الحقول المدعومة و طريقة انشائها من هنا :https://laravel.com/docs/7.x/migrations#creating-columns

اذاً لنقل الآن أنك قمت بانشاء ما تريد من الحقول ضمن الجدول , الآن حان الوقت لكتابة الأمر التالي كي يقوم لارافل بانشاء جدول فعلي في قاعدة البيانات بالبيانات التي قمت بادخالها , لاحظ في الأمر أيضاً بعض التعليقات التي سنرفقها هناك لكي تتعلم أكثر عن طريقة عمل الأمر :

#Migrate anything new
php artisan migrate
#Clear the db and migrate everything
php artisan migrate:fresh

اتجه الآن الى قاعدة البيانات في phpMyAdmin مثلاً , ستجد قاعدة بياناتك و جميع الجداول التي انشأتها هناك و جاهزة للعمل !

أنظمة لارفل , Model

الموديل Model هو الطريقة السحرية التي يتواصل بها لارافل مع قواعد البيانات , يمثل ال Model أحد مدخلات قاعدة البيانات في جدول محدد , و قد يبدو الأمر غير واضح الآن لكن من المؤكد أنه سيتضح مع المثال القادم.

لنأخد المدونات على سبيل المثال , لكي تستطيع انشاء مقال جديد عليك أولاً حفظه الى قاعدة البيانات ومن ثم عرضه و تعديله و حذفه حسب الحاجة , يمثل ال Model العنصر المساعد من لارافل للتعامل مع قواعد البيانات بصيغة مجزءة , ففي مثال المقالات سنقوم بانشاء Model باسم Article مثلاً.

لنبدأ بمثال مفيد , سنعمل الآن على Model للمقالات وسنتعلم أيضاً كيفية انشاء جدول فعلي في قاعدة البيانات بشكل شبه تلقائي للحفاظ على التنسيق في المشروع ! سنفتح سطر الأوامر و نكتب الأمر التالي (ضمن مجلد مشروع لارافل الذي قمنا بتنصيبه مسبقاً) :

php artisan make:model ModelName -m

الأمر السابق سيقوم بانشاء Model بالاسم الذي تختاره , و -m ستقوم بانشاء Migration مرتبطة بهذا ال Model بشكل تلقائي ويتبقى عليك فقط اضافة الحقول اللازمة , لكي تعمل الأمور بشكل صحيح و لا تتفاجئ بأي مشاكل في المستقبل , تأكد من اتباع قواعد التسمية , فان كان ال Model مخصص للمقالات فالتسمية الأنسب هي Article كلمة فردية و ليست جمع Articles والحرف الأول Capital , بالتالي سيقوم لارافل بانشاء جدول في قاعدة البيانات باسم articles.

يتم تخزين ال Models في مجلد app مباشرة , كما يمكنك انشاء مجلد مخصص لل Models ونقل ملفات ال Models اليه , لكن لا تنسى تغيير ال namespace الخاصة بال Model.

كي نستطيع استرجاع قيمة معينة من ال Model السابق , سنحتاج الى ملف Controller وكتابة الكود التالي :

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\ModelName; //include the model


class Rate extends Controller{
   public function getItem(){
      $Item = ModelName::find(5); // 5 is the item id 
       return $Item; // Collection contains the model data 
      //$Item->title = the title of this item in the database 
     //$Item->field_name 
   }
}

نشاهد في الكود السابق كيف يمكننا استرجاع معلومات أحد ال records , و كما شاهدت قمنا بكتابة $Item->title , title هنا هي اسم الحقل في قاعدة البيانات المرتبط بهذا ال Model. 

تكمن أهمية انشاء Model بامكانية التعامل مع elequent ORM للتعامل مع قاعدة البيانات , بالاضافة الى تسهيل عملية العلاقات بين الجداول و اضافة امكانيات كبيرة اخرى , سنأخذ مثال مبسط , سنفترض أن المقال الخاص بنا يوجد به حقل موجود فيه عدد الكلمات في المقال , ونريد حساب الوقت المقدر لقراءة المقال مثلاً , الانسان العادي يمكنه قراءة 250 كلمة في الدقيقة , بالتالي مدة قراءة مقال مكون من 1000 كلمة تكون : 1000 / 250 = 4 دقائق.

الفكرة هنا أن نقوم بانشاء Method ضمن ال Model مهمتها حساب عدد الدقائق المطلوبة لقراءة المقال , في الوضع الطبيعي سنقوم بعملية حسابية في كل مكان نعرض فيه المقال (الصفحة الرئيسية , صفحة المقال الفردية , نتائج البحث ... الخ) , وسنقوم بتكرار الكود نفسه في الصفحات الثلاث السابقة ,  وعند رغبتنا القيام بأي تعديل يجب القيام به في 3 صفحات وهذا مناف لأهم قواعد البرمجة , Don't Repeat Yourself أي لا تكرر نفس الكود مراراً و تكرارً , الحل الصحيح هو كتابة الكود مرة واحدة في ال Model واستدعائه في كل الصفحات السابقة وتعديله من مكان واحد فقط , ملف ال Model 

لنقم الآن بانشاء ال Method المسؤولة عن حساب وقت قراءة المقال , ضمن ملف ال Model الذي قمنا بانشائه نكتب الكود التالي داخل php class  : 

public function countReadTime(){
  return $this->words_count / 250; //words_count is a field number 
}

ومن ثم نقوم بعرض النتيجة عبر استدعاء ال Method السابقة كالتالي : 

$ModelName->countReadTime()

في النهاية

تكمن قوة لارافل في المرونة و الأمان و المجتمع الهائل الذي يسمح لك بتعلم اطار عمل متكامل في وقت قصير , قد لا تكون بعض الأمور واضحة في البداية , فكل ما أردنا الوصول اليه في هذا المقال هو اعطائك فكرة عامة عن اطار العمل و قدراته الهائلة , بمجرد البدء في تعلم لارافل ستجد أن الأمور أصبحت و اضحة و منطقية و نتمنى لك التوفيق :).

على الرغم من طول المقال , فربما كل ما شرحناه هو أقل من 5% من اطار العمل , يوجد الكثير لتعلمه , وننصحك فعلاً بتعلم اطار عمل جبار كلارافل , لا توجد احتمالية خسارة , ولنعطيك المزيد من الأمل , من ضمن المشاريع التي يمكن تصميمها ب لارافل مشروع مدونة بسيط , حتى مشروع متجر الكتروني متكامل , لا تضيع الفرصة وأبدا الآن!