آنچه درباره سیمفونی ۴ آموختم | بخش سوم

آنچه درباره سیمفونی ۴ آموختم | بخش سوم
آنچه درباره سیمفونی ۴ آموختم | بخش سوم


خب در ادامه قسمت قبل که نوشتن یک مسیریابی رو تو سیمفونی یاد گرفتیم تو این قسمت میخوام استفاده از روش ساده‌تر تعریف یک مسیر جدید رو آموزش بدم.

قبل از شروع شما میتونید کد قسمت قبل رو به صورت زیر دریافت کنید.

git clone https://github.com/mortezakarimi/symfony-learning.git

روش ساده‌تر به جای این که مسیریابی‌های سیستم رو درون فایل routes.yaml قرار بدیم اینه که شما استفاده از بسته زیر که نصب می‌کنید یک سری قابلیت‌های اضافی وارد سیستم می‌کنید. بریم نصبش کنید!

composer require annotations

در واقع بسته annotations میاد و بسته sensio/framework-extra-bundle این رو نصب می‌کنه که در ادامه راجع بهش صحبت می‌کنیم.

خب حالا وارد فایل routes.yaml خودتون بشید و به شکل زیر تمام اطلاعاتش رو کامنت کنید.

File Path | config/routes.yaml
#index:
#    path: /
#    controller: App\Controller\ArticleController::homepage

حالا می‌تونید برای این که مطمئن بشید که پروژه هیچ مسیری نداره صفحه اول پروژه رو ببینید.

حالا کنترلر ArticleController رو باز کنید و به شکل زیر تغییر بدید.

File Path | src/Controller/ArticleController.php
... codes
 use Symfony\Component\Routing\Annotation\Route;

class ArticleController
{
    /**
     * @Route(&quot/&quot)
     */
    public function homepage()
    {
        ... codes
    }
}

خب حالا اگر دوباره صفحه اول رو باز کنید می‌بینید که مثل قبل درست کار می‌کنه! حالا ما میتونیم مسیریابی‌های دلخواهمون رو به شکل Annotation استفاده کنیم.

خب Annotation چی هست؟ در واقع کامنت‌های هستند که به صورت تنظیمات خونده میشن و در پروژه استفاده میشن.

مسیریابی‌های باحال wildcard

خب حالا برای این که بتونیم چیزای باحال تر پیاده کنیم مثلا ما متد جدید تو کنترلرمون تعریف می‌کنیم به اسم show() که قرار برامون اطلاعات کامل یک مقاله رو نمایش بده و ما بهش مسیر

@Route("/news/why-asteroids-taste-like-bacon")

میدیم.

File Path | src/Controller/ArticleController.php
...code
class ArticleController
{
     ...code
    /**
     * @Route(&quot/news/why-asteroids-taste-like-bacon&quot)
     */
    public function show()
    {
        return new Response('Future page to show one space article!');
    }
}

نتیجه این اجرا رو به صورت زیر میتونید ببینید

حالا ما اگر بخوایم بخش آخر آدرس (slug) به صورت متغییر باشه برای خبرهای مختلف باید چیکار کنیم؟

به این صورت عمل می‌کنیم که why-asteroids-taste-like-bacon رو حذف می‌کنیم و {slug} بجای اون بخش قرار می‌دیم. تو کد زیر میتونید تغییرات رو ببینید!

File Path | src/Controller/ArticleController.php
...code
class ArticleController
{
     ...code
    /**
     * @Route(&quot/news/{slug}&quot)
     */
    public function show($slug)
    {
        return new Response(sprintf(
            'Future page to show the article: &quot%s&quot',
            $slug
        ));
    }
}

نکته: در قسمت {slug} شما می‌تونید هر نامی که دوست داشته باشید قرار بدید ولی باید دقت کنید که با متغییر ورودی متدتون باید همنام باشه که بتونید مقدارش رو در دسترس داشته باشید.

کد این بخش هم در این آدرس در دسترس هست. با نظراتتون ایده‌های جدیدتون برای استفاده بهتر رو با من به اشتراک بزارید.