فلنحاول أن نفهم أولا كيف ستعمل صفحتنا؛
في سمفوني، أول من يتلقى طلبيات الزوار هو الروتر router "مهيئ الطريق". يقوم هذا الأخير بفحص العنوان المطلوب و يبحث عنه في "دليل للطرق"، إذا لم يجد العنوان المطلوب فإنه يعلم الزائر بأن العنوان المطلوب غير موجود. أما إذا كان العنوان موجودا في الدليل، فستستمر الإجرائات لتهييء و تحويل الصفحة المطلوبة للزائر. "دليل الطرق" الذي تحدثنا عنه أعلاه هو في الواقع ملف تهيئة app/config/routing.yml، كل طريق فيه يصاحبها إسم الكونترولور Controller ( أي المتحكم ) الذي سيقوم بتهييء الصفحة المطلوبة و إرسالها للزائر.

من اجل شرح أولي أكثر إستفاضة، سنستعين بالكونترول الموجود إعتباطيا في النسخة المثبة و الموجود هنا : src/AppBundle/Controller/DefaultController.php . ها هو محتوى هذا الملف (الشرح فيما يلي):

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class DefaultController extends Controller
{
    /**
     * @Route("/", name="homepage")
     */
    public function indexAction(Request $request)
    {
        // replace this example code with whatever you need
        return $this->render('default/index.html.twig', [
            'base_dir' => realpath($this->getParameter('kernel.root_dir').'/..').DIRECTORY_SEPARATOR,
        ]);
    }
}

 

نستدعي المصادر التي سنستعملها (use) ، منها الفئة Controller التي يرث منها DefaultController.

الطريقة المعرفة داخل هذا الكونترولر إسمها indexAction ( الطرق التي يمكن إستدعائها من الروتر تحمل بالضرورة إسما ينتهي ب Action )، هذا النوع من الطرق يحول صفحة twig تصاحبها متغيرات. لا تندهشوا من twig، ليس إلا معينا على كتابة الhtml ممزوجا ب php و سنتطرق له في فصل لاحق.

في المثال الموجود إعتباطيا يقوم الindexAction بتحويل الصفحة  app\Resources\views\default\index.html.twig مع المعامل base_dir بالقيمة realpath الى آخره، لا حاجة ملحة لنا لفهم هذه الكتابة، يكفي الإضطلاع على الملف index.html.twig لنرى أن المتغير base_dir يستعمل هنا :

 Your application is now ready. You can start working on it at:
                    <code>{{ base_dir }}</code>

و عبر المتصفح في الصفحة localhost/symf3/web نستطيع إستنتاج هذه القيمة : C:\xampp\htdocs\symf3

 


لنصنع صفحتنا الأولى سنقوم بتعريف طريقها في ملف routing.yml و سنقوم بخلق كونترولر Controler و طريقة Action داخله تمكننا من تهييء الصفحة المطلوبة و تحويلها للزائر. أبسط مثال نصنعه هو مثال "أهلا!"، أي صفحة تقول أهلا :

  • في DefaultController نضيف طريقة جديدة نسميها ahlanAction:
	public function ahlanAction()
    {
        return $this->render('default/ahlan.html.twig');
    }
  • في الملف routing.yml الموجود تحت app/config  نضيف (حذاري، اليامل yml يكتب بدون "طاب" tabulation، هناك بالضبط أربع فراغات قبل path و defaults ):
ahlan:
    path:     /ahlan
    defaults: { _controller: AppBundle:Default:ahlan}
  • و أخيرا نخلق ملفا  ahlan.html.twig داخل app/resources/default و نضع فيه الكود html الذي نريد، في حالتنا سنضع فقط أهلا (سنتفرغ في الفصل المخصص للتويغ twig لهذه الامور))
<h3>ahlan</h3>

 

للإضطلاع على نتيجة عملنا يكفي الذهاب للصفحة :

http://localhost/symf3/web/app_dev.php/ahlan

 

نمر عبر app_dev.php الذي يعتبرنا مبرمجين ( و ليس مستعملين لموقع موجود فعلا)، و لذلك فوائد جمة سنأتي عليها لاحقا.