اكتشف إطار PHP Laravel


الدرس: الإجابات


الصفحة السابقة
لقد رأينا من قبل كيف يتم التعامل مع الطلب الوارد عبر الطرق. الآن دعونا نرى الردود التي يمكن أن نرسلها مرة أخرى إلى العميل. سوف نرى نظام عرض Laravel مع إمكانية تمرير المُدخلات. سنرى أيضًا كيفية إنشاء قوالب باستخدام أداة Blade .

بناء الاجابة


رموز الإجابات
في بروتوكول HTTP هناك رموز لتحديد الردود. وتصنف هذه الرموز حسب فئات واسعة. فيما يلي أهم 3:
  • 200 : تم تنفيذ الطلب بنجاح
  • 404 : لم يتم العثور على العنوان المطلوب
  • 500 : خطأ في الخادم
في الأمثلة التي استخدمتها في الفصل السابق على الطرق ، لم أقم بتحديد أي كود. لقد أعدت رسالة نصية إلى العميل. و هذا الأخير (العميل) لا يستخدم هذا الرمز ويريد شيئًا صريحًا ، لكن محركات البحث تعرف كيفية تفسير هذه الرموز.
بالإضافة إلى الطريقة البسيطة return  لإرجاع الإجابة ، يمكنني استخدام المساعد response  وتحديد الكود:

<?php
Route::get('{n}', function($n) { 
    return response('Je suis la page ' . $n . ' !', 200);
})->where('n', '[1-3]');
الآن أعيد اجابة HTTP حقيقية مع الكود المقابل لها.
هناك واجهة استجابة للاجابات. لذلك يمكننا أن نكتب:

<?php
return Response::make('Je suis la page ' . $n . ' !', 200);
وهو ما يعادل ما كتبناه أعلاه.

العرض VIEW


في تطبيق حقيقي ، نادراً ما تُرجع الإجابة مباشرة من مسار ما ، على الأقل سوف تمر عبر طريقة عرض. في أبسط نسخته ، يعد العرض ملفًا بسيطًا به كود html :

<!doctype html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>first view</title>
</head>
<body>
    انا واجهة عرض View 
</body>
</html>
يجب عليك حفظ طريقة العرض هذه (اخترت الاسم "vue1" ) في المجلد resources/views  بالملحق php  :
framework Laravel MVC
العرض في مجلد طرق العرض
حتى إذا وضعت كود HTML في عرض فقط ، فيجب عليك حفظه بامتداد php  .
يمكنك استدعاء هذا العرض من طريق باستخدام هذا الكود:

<?php
Route::get('/', function()
{ 
    return view('vue1');
});
أذكرك بدلالات Laravel الجميلة التي تقرأ مثل النثر: أُعيد ( return) منظر ( view) من ملف العرض "vue1" .
فيما يلي توضيح للعملية:
framework Laravel MVC
دورة الطلب مع وجهة نظر

عرض مع مُدخلات


بشكل عام ، لدينا معلومات لنقلها إلى طريقة عرض ، لنرى الآن كيفية إعدادها. لنفترض أننا نريد الرد على هذا النوع من الطلب:
http://monsite.fr/article/n
 يمكن أن يأخذ المُدخل n قيمة رقمية. لنرى كيف يتكون عنوان url هذا:
framework Laravel MVC
مُكونات رابط
  • قاعدة عنوان url ثابتة للموقع ، أيا كان الطلب ،
  • الجزء الثابت هنا يتوافق مع المقالات ،
  • الجزء المتغير يتوافق مع رقم المادة المطلوبة.
طريق Route
نحتاج إلى طريق لاعتراض عناوين url هذه:

<?php
Route::get('article/{n}', function($n) { 
    return view('article')->with('numero', $n); 
})->where('n', '[0-9]+');
عرض VIEW
علينا فقط إنشاء طريقة العرض article.php في المجلد resources/views :

<!doctype html>
<html lang="fr">
<head>
    <meta charset="UTF-8">
    <title>Les articles</title>
</head>
<body>
    <p>C'est l'article n° <?php echo $numero ?></p>
</body>
لاسترداد رقم المقالة ، نستخدم المتغير $numero . فيما يلي مخطط للعملية:
framework Laravel MVC
طلب المقالة رقم 1
هناك طريقة "سحرية" لنقل المُدخل ، على سبيل المثال لنقل المتغير numero كما فعلت أعلاه ، يمكننا كتابة الكود مثل هذا:

<?php
return view('article')->withNumero($n);
يجب عليك فقط ربط اسم المتغير بالكلمة الرئيسية with .
يمكننا أيضًا تمرير صفيف كمُدخل ثاني:

<?php
return view('article', ['numero' => $n]);

Blade


تبسيط بناء الجملة
لدى Laravel محرك قوالب أنيق يسمى Blade والذي يسمح لنا بالقيام بالكثير من الأشياء. الأول هو تبسيط بناء الجملة. على سبيل المثال بدلاً من السطر التالي الذي استعملناه في العرض السابق:

<p>C'est l'article n° <?php echo $numero ?></p>
يمكننا استخدام بناء الجملة هذا مع Blade :

    <p>C'est l'article n° { { $numero }}</p>
يتم تفسير أي شيء بين الأقواس المزدوجة كرمز PHP . ولكن لكي تنجح ، يجب أن تخبر Laravel أننا نريد استخدام Blade لهذا العرض. يتم ذلك ببساطة عن طريق تعديل اسم الملف:
عرض مفعلة لـ blade
فقط أضف "blade" قبل التمديد "php" . يمكنك اختبار المثال السابق باستخدام هذه التعديلات وستلاحظ أن كل شيء يعمل بشكل مثالي مع بناء جملة محسّن.
هناك أيضا نسخة مع بناء الجملة {!! ... !!}. الفرق بين الإصدارين هو أن النص بين الأقواس المزدوجة قد نجا أو تم تنقيته. إنه إجراء أمان لأنه يمكن للمستخدم وضع شفرة ضارة بشكل جيد في عنوان url .
قالب  template
تتمثل الوظيفة الأساسية لـ Blade في السماح باستخدام templating ، أي تحديد كود العرض التقديمي. دعنا نواصل مثالنا من خلال استكمال تطبيقنا مع مسار آخر مسؤول عن اعتراض عناوين url للفواتير وطريقة عرضها:

    <?php
    Route::get('facture/{n}', function($n) { 
        return view('facture')->withNumero($n); 
    })->where('n', '[0-9]+');
    <!doctype html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <title>Les factures</title>
    </head>
    <body>
        <p>C'est la facture n° { { $numero }}</p>
    </body>
    </html>
نحن ندرك أن هذا العرض هو نفسه عمليا بالنسبة للمقالات. سيكون من المثير للاهتمام وضع الكود المشترك في ملف. هذا هو بالضبط الغرض من القالب لتنفيذ هذه العملية.
هنا هو القالب:

    <!doctype html>
    <html lang="fr">
    <head>
        <meta charset="UTF-8">
        <title>@yield('titre')</title>
    </head>
    <body>
        @yield('contenu')
    </body>
    </html>
أخذت الشفرة العامة وقدمت موقعين تم تحديدهما بواسطة الكلمة الرئيسية @ yield وأُطلق عليها اسم "titre" و "contenu" . الآن فقط علينا تعديل صفحتي العرض view الاثنين. و هذا للمقالات:

    @extends('template')
    @section('titre')
        Les articles
    @endsection

    @section('contenu')
        <p>C'est l'article n° { { $numero }}</p>
    @endsection
وهذا كل شيء بالنسبة للفواتير:

    @extends('template')
    @section('titre')
        Les factures
    @endsection
    @section('contenu')
        <p>C'est la facture n° { { $numero }}</p>
    @endsection
أولاً نقول أننا نريد استخدام القالب @extends واسم القالب "template" . بعد ذلك ، نملأ المساحات الموجودة في القالب ببناء الجملة @section عن طريق تحديد اسم الموقع وإغلاقه @endsection ( لا يزال بناء الجملة القديم @stop يعمل) . فيما يلي رسم تخطيطي لتصور كل هذا مع المقالات:
framework Laravel MVC
كيف يعمل القالب
على مستوى مجلد طرق العرض ، لدينا الملفات الثلاثة:
framework Laravel MVC
مجلد صفحات العرض
عندما تصبح الملفات عديدة ، سننظم views في مجلدات. يمكنك أيضًا ملاحظة أن هناك العديد بالفعل في التثبيت الأساسي. 

الموجّهات redirections


غالبًا ما لا يكون من الضروري إرسال الاستجابة مباشرةً ولكن إعادة التوجيه إلى عنوان url آخر. لتحقيق هذا لدينا المساعد redirect :

<?php
return redirect('facture');
نحن هنا نعيد التوجيه إلى عنوان url facture . يمكننا أيضًا إعادة التوجيه على مسار محدد:

<?php
return redirect()->route('facture');
نحن هنا نقوم بإعادة توجيه على الطريق المحدد facture .
سنرى العديد من الأمثلة على عمليات إعادة التوجيه في الفصول التالية.

في الخلاصة


  • تقدم Laravel إمكانية إنشاء طرق عرض.
  • من الممكن ببساطة نقل المُدخلات إلى طرق العرض.
  • تتيح لك أداة Blade إنشاء قوالب وبالتالي تحسين كود العرض.
  • يمكنك إعادة التوجيه بسهولة.