شروحات متقدمة لتطوير البرمجيات باللغة العربية
سنتحدث اليوم عن منصة عمل متقدمة ومميزة للغة الـ PHP تتميز بالعديد من المزايا والخصائص المتقدمة والتي ستنقل المواقع والتطبيقات التي تقوم ببنائها إلى مستوى آخر، وسأقوم بذكر 10 من أهم المزايا التي يتميز بها هذا الـ Framework والتي ستخبرك لماذا يجب عليك الانتقال إلى هذه المنصة المميزة.
في لغة الـ PHP عندما نقوم بالاستعﻻم من قواعد البيانات فنحتاج لكتابة عدة اسطر من أوامر الـ SQL، وحتى عندما نتعامل مع منصات مثل CodeIgniter أو CackePHP فإننا نقوم بكتابة أسطر PHP طويلة ونحصل في النهاية على مصفوفة تحتوي على النتائج.
إنما في حالة Eloquent وهي عبارة عن ORM تمكننا من التعامل مع الداتابيز بشكل مرن وتطبق مفهوم الـ OOP بشكل كامل ومميز مما يتيح إمكانية تعريف دوال ضمن المودل تستطيع إستدعائها بشكل سريع.
مثال عن تعريف مودل Model
<?php class Task extends Model {}
بهذه البساطة هذا كل ما ستحتاجه لتعريف Model لجدول باسم tasks في قواعد البيانات وتستطيع الآن استخدام عدد كبير من الدوال التي تمكنك من الاستعﻻم بشكل سريع من هذا الجدول
أمثلة عن استخدام المودل
<?php // Fetch all tasks $tasks = Task::all(); // Fetch the task with an id of 1 $task = Task::find(1); // Update a task $task = Task::find(1); $task->title = 'Put that cookie down!'; $task->save(); // Create a new task Task::create([ 'title' => 'Write article' ]); // Delete a task Task::find(1)->delete();
لنقم بتعريف مودل آخر للمستخدمين لتجربة استخدام العﻻقات:
<?php class User extends Model { public function tasks(){ return $this->has_many('Task'); } }
لنبدأ الآن باستخدام هذه العﻻقة:
// Get all tasks by the author with an id of 1 $tasks = User::find(1)->tasks; // Get the author of a task $author = Task::find(5)->user()->username; // Insert a new task by author $task = new Task([ title: 'Go to store.' ]); User::find(1)->tasks()->insert($task);
كما تشاهد عزيزي القارئ فإن عملية الاستعﻻم وحتى إنشاء العﻻقات أصبحت أوضح و أسهل بكثير.
لطالما كانت عملية البحث وإيجاد classes للغة الـ PHP وتركيبها أو حتى تحديثها أمر في غاية الصعوبة والتعقيد، لكن كل هذا تغير بعد توفر Composer و Packagist وهو يشبه npm الخاص بلغة الـ node.
بسبب إعتماد ﻻرفل لـ Composer أصبح من السهل جدا تركيب package ما داخل مشروعك كل ما عليك هو كتابة أمر بسيط داخل موجه الأوامر Terminal وسيتم تحميل الـ package وتركيبها بشكل تلقائي.
وفي حال أردت تحديث الـ packages أو حتى ﻻرفل نفسه فكل ما عليك فعله هو كتابة الأمر التالي في موجه الأوامر:
composer update
يقدم ﻻرفل طريقة بسيطة لبناء الروابط في مشروعك وبإمكانك الاختيار بين أكثر من طريقة.
الطريقة اﻷولى في حال تستيطع تعريف دالة بسيطة وتمريرها لتقوم بمعالجة طلبك:
<?php Route::get('users/{id}', function($id) { // find the user $user = User::find($id); // display view, and pass user object return View::make('users.profile') ->with('user', $user); });
وتستطيع أيضا أن تشير لدالة ضمن كﻻس ما controller بالشكل التالي:
Route::get('users/{id}', 'Users@show');
<?php class UsersController extends Controller { /** * Display the specified resource. */ public function show($id) { // find the user $user = User::find($id); // display view, and pass user object return View::make('users.profile') ->with('user', $user); } }
موضوع الوثوقية هو أمر هام جدا في عالم الويب وستحتاجه في أغلب المشاريع التي تعمل عليها، يساعدك ﻻرفل في عدة أمور سواء بما يتعلق بتسجيل الدخول والخروج او بالحصول على معلومات المستخدم المسجل دخول.
مثﻻ في حال أردت بناء controller لمعالجة تسجيل الدخول فسيكون هذا الكود كل ما تحتاج إليه:
Route::post('login', function() { $credentials = array( 'username' => Input::get('username'), 'password' => Input::get('password') ); // perform validation if ( Auth::attempt($credentials) ) { // Credentials match. Logged in! return Redirect::to('admin/profile'); } });
وفي حال احتجت الى معلومات المستخدم المسجل دخول فبإمكانك ببساطة كتابة Auth::user() في أي مكان في تطبيقك وستحصل على معلومات المستخدم كاملة.
$user = Auth::user()->username;
لطالما كانت عملية إرسال البريد الإلكتروني من تطبيقك عملية مجهدة وشاقة، الأمر الذي سيتغير تمام بعد استخدامك لـ Laravel.
يستخدم ﻻرفل SwiftMailer ويقدم واجهة برمجية سهلة للتعامل مع البريد الإلكتروني.
Migration هي خاصية جميلة ومميزة جدا يقدمها ﻻرفل وتساعدك على تعريف بنية قواعد البيانات الخاصة بك من خﻻل كود الـ php كما يساعدك على إجراء تعديلات على الحقول وإضافة حقول وجداول وتطبيق هذه التغييرات على نسخ موجودة فعلا لديك بطريق سهلة وفعالة جدا.
مثال عن طريقة تعريف جدول:
<?php use Illuminate\Database\Migrations\Migration; class CreateTasksTable extends Migration { /** * Run the migrations. */ public function up() { Schema::create('tasks', function($table) { $table->increments('id'); $table->string('title'); }); } /** * Reverse the migrations. */ public function down() { Schema::drop('tasks'); } }
بعد تعريف الـ migrations الخاصة بتطبيقك كل ماعليك هو تشغيل الأمر php artisan migrate ليتم إنشاء الجداول الخاصة بك في قاعدة البيانات.
Blade هو templating engine مميز من ﻻرفل يجعل عملية التعامل مع الـ templates في php عملية سهلة وبسيطة جداً فبدﻻ من كتابة الكود التالي:
<ul> <?php foreach($people as $p) : ?> <li><?php echo $p; ?></li> <?php endforeach; ?> </ul>
ستتمكن من كتابته بهذه الطريقة البسيطة:
<ul> @foreach($people as $p) <li>{{ $p }}</li> @endforeach </ul>
كما يقدم طريقة مميزة جدا للتعامل مع الـ layouts ففي حال كنت تريد استخادم layout فكل ما عليك فعله هو تعريفه في ملفه الخاص بهذا الشكل:
// views/layout.blade.php <!doctype html> <html> <head> <title></title> </head> <body> <div class="container"> @yield('container') </div> </body> </html>
ثم تستطيع استخدامه بشكل بسيط ووطباعة المحتوى الذي تريد في جزء الـ content، كما يمكنك طبعا تعريف أجزاء أخرى حسب الطلب مثل sidebar
// views/home/hello.blade.php @layout('layout') @section('container') <h1>Hello, {{ $user->name }}!</h1> @endsection
يوفر ﻻرفل أدوات تساعدك على بناء RESTful API بشكل سهل وسريع شاهد المثال التالي
أوﻻ لتعريف الـ routes نكتب هكذا في ملف الـ routes
Route::resource('tasks', 'TasksController');
بهذا الشكل نكون عرفنا resource كامل وقمنا بربطه مع الكونترولر TasksController وقمنا بتسجيل عدة endpoints لهذا الـ resource وهي:
GET tasks (Show all tasks) GET tasks/{id} (Show single task) GET tasks/create (Display form to create a new task) POST tasks (Create a new task) GET task/{id}/edit (Edit single task) PUT tasks/{id} (Update task) DELETE tasks/{id} (Delete task)
الان لتوليد TasksController نقوم بوضع هذا الامر في موجه الأوامر:
php artisan controller:make TasksController
ليتم توليد الكونترولر بهذا الشكل:
<?php class TasksController extends Controller { /** * Display a listing of the resource. */ public function index() {} /** * Show the form for creating a new resource. */ public function create() {} /** * Store a newly created resource in storage. */ public function store() {} /** * Display the specified resource. */ public function show($id) {} /** * Show the form for editing the specified resource. */ public function edit($id) {} /** * Update the specified resource in storage. */ public function update($id) {} /** * Remove the specified resource from storage. */ public function destroy($id) {} }
في كل مرة تعمل على مشروعك تحاول إضافة بيانات تجريبية وغالبا ما تقوم بذلك بشكل يدوي، وهو أمر مجهد ويضيع الكثير من الوقت، باستخدام database seed تستطيع تعريف مصفوفات بسيطة ليتم توليد بيانات عشوائية وتخزينها بجداولك بشكل مؤتمت وسريع.
<?php // app/database/seeds/tasks.php return [ [ 'title' => 'Go to the store' ] [ 'title' => 'Finish Laravel article' ] [ 'title' => 'Pick up eggs.' ] ]);
بعد تعريف عدة seeders بامكانك تشغيل هذا الامر من موجه الأوامر ليتم تنفيذها:
php artisan db:seed
يوجد عادة عدة إجراءات تقوم بها عندما تريد تخزين أو استعادة حقول معينة من قاعدة البيانات، على سبيل المثال عندما يقوم المستخدم بالتسجيل في موقعك فانت تريد تشفير كلمة المرور قبل تخزينها في قاعدة البيانات، عوضا عن إجراء هذا التشفير بشكل يدوي يمكنك ببساطة انشاء دالة setter داخل المودل لتقوم بتشفيرها في كل مرة يتم إضافة سجل جديد او يتم التعديل على كلمة المرور، شاهد الكود للتوضيح:
<?php // models/User.php class User extends Eloquent { public function setPassword() { return Hash::make( $this->password ); } }
بنفس الطريقة أيضا بامكانك استخدام دالة getter لتحصل على المعلومات بالشكل الذي يناسبك، لنفرض مثﻻ انك تخزن الاسم الاول والاسم الاخير بشكل في حقلين منفصلين في قاعدة البيانات، لكنك غالبا ما تريد طباعتهم معاً، لذلك بامكانك إنشاء دالة بسيطة تعيدهم على شكل اسم كامل وتستخدمها في كل مكان تريد، شاهد المثال للتوضيح:
<?php // models/User.php class User extends Eloquent { public function fullName() { return $this->firstName . ' ' . $this->lastName; } }
الان لاستخدامها يمكنك الكتابة بهذا الشكل:
echo User::find(1)->fullName();
كما شاهدتم، إن التعامل مع ﻻرفل يضيف نكهة خاصة للبرمجة بلغة PHP ويساعدك على كتابة كود صغير للحصول على نتائج كبيرة.
بدأت منذ فترة بتسجيل دورة عن Laravel 3 لكنن توقفت عن تسجيلها بسبب اقتراب صدور Laravel 4 والآن بعد صدوره منذ أيام قليلة سأبدأ بتسجيل الدورة الجديدة في قناتي على اليوتيوب.
اترك رداً