الكورس

Advertisements

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> من المثال السابق بوحدة التحكم الخاصة بك.

 

يمكن استدعاء وحدة التحكم التي قمت بإنشائها من داخل ملف sources.php باستخدام بناء الجملة التالى:

Syntax:
Route::get(‘base URI’,’[email protected]’);
 
مثال للتوضيح:-

 

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', '[email protected]')->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 NameActionURIVerb
picture.indexindexpicture/GET
picture.createcreatepicture/create/GET
picture.storestorepicture/POST
picture.showshow{picture/{picture/GET
picture.editeditpicture/{picture}/edit/GET
picture.updateupdate{picture/{picture/PUT/PATCH
picture.destroydestroy{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}', '[email protected]');

 

 



الإبلاغ عن خطأ

×

إذا وجد خطأ وتريد الإبلاغ عن هذا الخطأ، أو إذا كنت تريد تقديم اقتراح على شىء معين، فلا تتردد في إرسال بريد إلكتروني إلينا:

[email protected]

شكرًا لك على مساعدتك لنا!

Advertisements