اكتشف إطار PHP Laravel


الدرس: وحدات التحكم


الصفحة السابقة
لقد رأينا دورة الطلب منذ وصوله ، ومعالجته من خلال الطرق واستجابته مع وجهات العرض التي يمكن أن تدعمها Blade . مع كل هذه العناصر ، يمكنك إنشاء موقع كامل بشكل جيد ولكن لا يزال Laravel يقدم العديد من الأدوات القوية التي سأقدمها لك.
لتنظيم التعليمات البرمجية الخاصة بك بشكل صحيح في تطبيق Laravel ، عليك توزيع المهام بشكل جيد. في الأمثلة التي تمت رؤيتها حتى الآن ، لقد قمت بإعادة عرض من طريق ، فلن تقوم بذلك أبدًا في تطبيق حقيقي (حتى لو لم يمنعك أحد من القيام بذلك!). الطرق هي مجرد نظام إحالة لفرز الطلبات الواردة. لكن من الذي يعتني بالبقية؟ حسنا هذه هي وحدات التحكم ، موضوع هذا الفصل.

وحدات التحكم


دورها
تتمثل مهمة وحدة التحكم في تلقي طلب (تم فرزه بالفعل بواسطة مسار) وتحديد الاستجابة المناسبة ، لا أكثر ولا أقل. فيما يلي توضيح للعملية:
framework Laravel MVC
معالجة الطلب من قبل وحدة تحكم
المكونات
لإنشاء وحدة تحكم ، سوف نستخدم Artisan ، صندوق أدوات Laravel . في وحدة التحكم ، أدخل هذا الأمر:

php artisan make:controller WelcomeController
إذا سارت الامور بشكل جيد ستجد وحدة التحكم هنا:
framework Laravel MVC
وحدة التحكم التي تم إنشاؤها
مع هذا الكود:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class WelcomeController extends Controller
{
    //
}
سوف تضيف الطريقة index :

<?php
...
class WelcomeController extends Controller
{
    public function index()
    {
        return view('welcome');
    }
}
دعنا نلقي نظرة على هذا الكود:
  • أولاً نجد مساحة الاسم ،
  • ترث وحدة التحكم من الفئة Controller  الموجودة في نفس المجلد والتي تجعل من الممكن تحديد الإجراءات الشائعة لجميع وحدات التحكم ،
  • لقد وجدنا أخيرًا طريقة index  تُرجع شيئًا تعرفه الآن: عرض ، وفي هذه الحالة  "welcome"تحدثنا عنه بالفعل. لذلك إذا قمت بالاتصال بهذه الطريقة ، سترجع عرض  "welcome"إلى العميل.
الاتصال مع الطرق
الآن السؤال الذي يمكن طرحه هو: كيف يتم الربط بين الطرق وأجهزة التحكم؟ افتح ملف المسار وأدخل هذا الكود:

<?php
Route::get('/', 'WelcomeController@index');
الآن مع عنوان url الأساسي ، يجب أن تجد صفحة Laravel الرئيسية:
framework Laravel MVC
الصفحة الرئيسية
فيما يلي تصور للرابط بين الطريق ووحدة التحكم:
framework Laravel MVC
اتصال بين الطريق وحدة تحكم
نرى أنه على مستوى الطريق يكفي تعيين اسم وحدة التحكم واسم الطريقة.
إذا كنت مهتمًا بالكود الذي لاحظته بلا شك أنه على مستوى الطريق لا نحدد مساحة اسم وحدة التحكم ، يمكننا أن نتساءل بطريقة شرعية عن كيفية العثور عليه. يبسط Laravel بناء الجملة عن طريق إضافة مساحة الاسم تلقائيًا.

إذا كان عليك وضع وحدات التحكم الخاصة بك في مساحة اسم أخرى ، فيجب عليك التدخل في المتغير $namespace   في الملف  App\Providers\RouteServiceProvider  :

<?php
protected $namespace = 'App\Http\Controllers';
هذه القيمة هي الأساس لمساحات الأسماء.
طريق مُسمّى
بنفس الطريقة التي يمكننا بها تسمية مسار كلاسيكي ، يمكننا أيضًا إعطاء اسم لمسار يشير إلى طريقة تحكم:

<?php
Route::get('/', ['uses' => 'WelcomeController@index', 'as' => 'home']);
هنا نُسمى home  الطريق إلى أسلوب index لوحدة التحكم  WelcomeController بالنسبة لـ URL .

استخدام وحدة تحكم


دعونا الآن نرى مثالًا عمليًا لتطبيق وحدة التحكم. سوف نحتفظ بمثالنا في المقالات ولكننا نعالجها الآن بوحدة تحكم. نحتفظ بنفس القالب ونفس المشاهدات:
framework Laravel MVC
القالب ووجهات النظر
سننشئ وحدة تحكم (تدريب باستخدام artisan) للعناصر:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class ArticleController extends Controller
{

    public function show($n)
    {
        return view('article')->with('numero', $n);
    }

}
framework Laravel MVC
ملف التحكم
في وحدة التحكم هذه لدينا طريقة show  مسؤولة عن إنشاء العرض. لدينا فقط لإنشاء الطريق:

<?php
Route::get('article/{n}', 'ArticleController@show')->where('n', '[0-9]+');
فيما يلي توضيح للعملية باستخدام وحدة التحكم:
framework Laravel MVC
العناصر مع وحدة تحكم
لاحظ أنه يمكننا استخدام طريقة "السحر" لنقل المُدخل إلى العرض:

<?php
return view('article')->withNumero($n);

في الخلاصة


  • يتم استخدام وحدات التحكم لتلقي الطلبات التي تم فرزها حسب الطرق ولتقديم استجابة للعميل.
  • artisan يجعل من السهل إنشاء وحدة تحكم.
  • من السهل استدعاء طريقة تحكم من مسار.
  • يمكننا تسمية الطريق الذي يشير إلى طريقة تحكم.