Laravel Controllers
Controllers ‘وحدات التحكم’ هي ميزة أساسية أخرى تقدمها Laravel ، حيث بدلاً من تحديد طلب المعالجة في شكل عمليات الـ Closures في ملفات الـ routes، من الممكن تنظيم هذه العملية بمساعدة classes وحدة التحكم.
تم تصميم وحدات التحكم لتجميع معالجة الطلب المرتبط ضمن class واحدة، في مشروع Laravel الخاص بك ، يتم تخزينها في app/Http/Controllers’ directory.
💡 الشكل الكامل لـ MVC هو وحدة تحكم عرض النموذج ‘Model View Controller’، والتي تعمل بمثابة توجيه حركة المرور بين طرق العرض View والنماذج Model.
إنشاء Controllers
افتح موجه الأوامر cmd أو الـ terminal واكتب الأمر التالي لإنشاء وحدة تحكم :
Syntax:
php artisan make:controller <controller-name> --plain
💡 استبدل <controller-name> من المثال السابق بوحدة التحكم الخاصة بك.
Syntax:
Route::get(‘base URI’,’controller@method’);
مثال للتوضيح:-
1. إنشاء وحدة تحكم (وليكن بإسم AdminController):
php artisan make:controller AdminController --plain
2. يمكنك رؤية وحدة التحكم التي تم إنشاؤها في app / Http / Controller / AdminController.php مع بعض الأكواد الأساسية المكتوبة بالفعل لك ويمكنك إضافة الأكواد الخاص بك بناءً على حاجتك:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class AdminController extends Controller {
//
}
Controller Middleware
يمكنك تعيين وحدات تحكم (Controllers) للبرامج الوسيطة (Middlewers) للتوجيه في ملفات الـ route الخاصة بمشروعك باستخدام الأمر التالى:
Route::get('profile', 'UserController@show')->middleware('auth');
💡 تساعد methods البرامج الوسيطة (Middlewers) من وحدة التحكم (Controllers) في تعيين البرامج الوسيطة بسهولة إلى نشاط وحدة التحكم ونشاطها + يمكن فرض قيود على تنفيذ طرق معينة على البرامج الوسيطة في class وحدة التحكم.
class UserController extends Controller {
public function __construct() {
// function body
}
}
💡 تسمح لك وحدات التحكم أيضًا بتسجيل البرامج الوسيطة باستخدام الـ Closure، يوفر ذلك طريقة ملائمة لتحديد الوسيطة لوحدة تحكم واحدة دون تحديد class الوسيطة بأكملها:
$this->middleware(function ($request, $next) {
// middleware statements;
return $next($request);
});
Resource Controllers
Laravel تُعين Resource routing (توجيه موارد) لـ routes الـ “CRUD” النموذجية إلى وحدة تحكم باستخدام سطر واحد من التعليمات البرمجية.
على سبيل المثال ، قد ترغب في إنشاء وحدة تحكم تتعامل مع جميع طلبات HTTP لـ “الصور” المخزنة بواسطة التطبيق الخاص بك! باستخدام الأمر Artisan make:controller ، يمكننا إنشاء وحدة تحكم بسرعة:
php artisan make:controller PictureController --resource
سينشئ الأمر السابق وحدة تحكم في app/Http/Controllers/PictureController.php، ستحتوي وحدة التحكم على طريقة لكل من عمليات الموارد أو المصادر (resource) المتاحة.
بصفتك مطور Laravel لك الحرية فى تسجيل العديد من وحدات التحكم في الـ resource في وقت واحد من خلال تمرير مصفوفة (array) إلى method الـ resource، كالتالى:
Route::resources([
'picture' => 'PictureController',
'pass' => 'PasswordController',
]);
💡 فيما يلي جدول الإجراءات التي يتم التعامل معها بواسطة وحدة تحكم الـ resource:
Action Handled by Resource Controllers
Route Name | Action | URI | Verb |
---|---|---|---|
picture.index | index | picture/ | GET |
picture.create | create | picture/create/ | GET |
picture.store | store | picture/ | POST |
picture.show | show | {picture/{picture/ | GET |
picture.edit | edit | picture/{picture}/edit/ | GET |
picture.update | update | {picture/{picture/ | PUT/PATCH |
picture.destroy | destroy | {picture/{picture/ | DELETE |
Implicit Controllers
تسمح أنواع وحدات التحكم هذه للمطورين بتحديد مسار واحد للتعامل مع الإجراءات المتعددة داخل وحدة التحكم.
يمكنك تحديده في ملف route.php باستخدام method الـ Route:controller، كالتالى:
Route::controller('base URI','<class-name-of-the-controller>');
💡 استبدل <class-name-of-the-controller> بإسم الـ class التي أعطيتها لوحدة التحكم الخاصة بك.
سيتم تخزين ملف وحدة التحكم الـ Implicit الخاص بك: app / Http / Controllers / ImplicitController.php؛ وسيكون مثل هذا:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Controllers\Controller;
class ImplicitController extends Controller {
public function getIndex(){
echo 'starting method';
}
public function getVal($id){
echo 'show value';
}
public function getAdminData(){
echo 'admin data method';
}
public function adminPassword(){
echo 'password method';
}
}
Constructor Injection
يتم استخدام الـ service container (حاوية خدمة) فى Laravel لحل جميع وحدات تحكم Laravel، نتيجة لذلك يمكنك كتابة أي تلميحات قد تحتاجها وحدة التحكم في مُنشئها.
سيتم حل الـ dependencies المعلنة تلقائيًا وحقنها في مثيل وحدة التحكم:
<?php
namespace App\Http\Controllers;
use App\Repositories\UserRepository;
class UserController extends Controller {
protected $users;
public function __construct(UserRepository $users){
$this->users = $users;
}
}
Method Injection
بالإضافة إلى constructor injection، يمكنك أيضًا كتابة الـ dependencies على methods وحدة التحكم الخاصة بك.
إحدى حالات الاستخدام الشائعة لـ method الـ Injection هي حقن مثيل Illuminate \ Http \ Request في methods وحدة التحكم:
?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller {
public function store(Request $request){
$name = $request->name;
//
}
}
💡 إذا كانت method وحدة التحكم الخاصة بك تتوقع أيضًا إدخالاً من parameter المسار ، فقم بإدراج arguments للمسار بعد الـ dependencies الخاصة بك الأخرى.
مثال للتوضيح:
Route::put('user/{id}', 'UserController@update');
الإبلاغ عن خطأ
×إذا وجد خطأ وتريد الإبلاغ عن هذا الخطأ، أو إذا كنت تريد تقديم اقتراح على شىء معين، فلا تتردد في إرسال بريد إلكتروني إلينا:
info@albashmoparmeg.com
شكرًا لك على مساعدتك لنا!