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

آموزش ساختار فایل، مسیریابی و کنترلر
آموزش ساختار فایل، مسیریابی و کنترلر


خب تو این بخش که در ادامه بخش اول که یک پروژه سیمفونی ساختیم، میخوایم در رابطه با ساختار فایل‌های سیمفونی صحبت کنیم و این که چطوری یک کنترلر (Controller) و مسیریابی (Route) بنویسیم برای یک پروژه سیمفونی.

زمانی که شما پوشه پروژه رو باز کنید با ساختار پوشه‌های زیر رو به رو میشید

  • bin
  • config
  • public
  • src
  • var
  • vendor

خب به ترتیب از بالا به پایین شروع می‌کنیم به تعریف هر پوشه

bin

این پوشه داخل فایل‌های اجرایی وجود دارن که می‌تونید با استفاده از ترمینال از این دستورات استفاده کنید که در ادامه ساخت پروژه از معروف‌ترین کامند فایل این پوشه زیاد استفاده می‌کنیم که فایل console هست. پشنهاد می‌کنم که یک بار دستور php bin/console رو وارد کنید تا ببینید چه قابلیت‌های بهتون میده فایل console موجود در این پوشه

config

این پوشه بخش بسیار مهمی هست برای این که داخل این پوشه فایل‌های تنظیمات پروژه هست و شما همونطور که در ادامه این سری آموزش‌ها می‌بینید، می‌تونید تنظیمات ایمیل، اضافه کردن کتابخونه، تنظیمات سیستم برای محیط توسعه (Development) و یا عمل آوری (Production) و ... تغییر بدید.

public

این پوشه رو میشه تو فریمورک‌های دیگه هم دید و فایل‌های عمومی پروژه که قرار در دسترس همه کاربرها باشه قرار داره وجود داره برای مثال فایل‌های Assets مثل تصاویر و فونت‌ها اینجا هستند.

src

خب اینجا دیگه همه چیزه تقریبا این پوشه شامل تمام کنترل‌ها، اینتیتی‌ها ( تو فریمورک Yii میگفتیم مدل) و... وجود داره که اکثر کارهای توسعه رو ما روی فایل‌های داخل این پوشه انجام میدیم.

var

این پوشه محل نگهداری فایل‌های متغییرمونه که توسط سیستم ایجاد میشن معمولا برای مثلا فایل‌های لاگ (log) و کش (Cache) داخل این پوشه ایجاد و نگداری میشن.

vendor

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

بریم اول صفحه‌مون رو تو سیمفونی بسازیم

خب شاید یکی از دلایلی که من خیلی بیشتر از سیمفونی نسبت به لاراول و Yii استقبال کردم این بود باشه که همه چیز رو به یک روش خیلی ساده خودش برات انجام میده،‌ چطوری؟ بیایید ببینیم!

خب اول یکمی توضیح بدم که روت چیه،‌ در حقیقت مسیریابی نوشته می‌شه که فریمورک بفهمه ما الان که برای این URL خاص درخواست دادیم این درخواست ما رو به کی برسونه؟ خب پس ما برای این نیاز داریم که مسیریابی‌های مختلف رو داشته باشیم. اول بریم روش سخت نوشت مسیریابی رو یاد بگیریم بعدش روش آسونش رو هم میگم.

خب اول باید فایل اصلی مسیریابی تو آدرس config/routes.yaml رو باز کنید. کدی مشابه کد زیر می‌بینید:

#index:
#    path: /
#    controller: App\Controller\DefaultController::index

اول باید این خطوط رو با حذف # از اولش، از حالت کامنت بردارید تا فعال بشن حالا این خطوط چی میگن؟ میگن که اگر درخواستی اومد که آدرس / رو میخواست برو و متد index() رو از کلاس DefaultController اجرا کن. البته ما برای این پروژه DefaultController رو به ArticleController تغییر میدیم و همچنین index رو به homepage که کد نهایی به شکل زیر میشه:

index:
    path: /
    controller: App\Controller\ArticleController::homepage

خب! اولین مسیریابمونم نوشتیم ولی خب هنوز کنترلی براش وجود نداره! پس بریم کنترل رو هم بسازیم!

برای نوشت کنتلر برید تو مسیر src/Controller و یک فایل جدید به اسم ArticleController.php بسازید

نکته: اگر از PhpStorm استفاده می‌کنید احتمالا تشخیص داده که پروژه شما از کامپوزر استفاده می‌کنه و اگر فعال کرده باشید می‌تونید با استفاده از کلیک راست روی پوشه src/Controller یک کلاس php ایجاد کنید که خودش به طور خودکار namespace رو براتون قرار بده، ولی اگر هم ندارید میتونید ادامه این آموزش رو همراه باشید راه‌های ساده‌تر هم وجود داره!

بعد از ساخت کلاس یک متد جدید به صورت عمومی درونش قرار بدید به نام homepage که در نتیجه کد داخل کلاستون مشابه کد زیر میشه:

<?php

namespace App\Controller;

class ArticleController
{
    public function homepage()
    {

    }
}

خب حالا تقریبا همه چیز آمادس فقط یک قانون وجود داره! این که شما باید داخل متد‌های کنترلرتون باید حتما یک پاسخ (response) برگردونید تا بتونه کار کنه، این کار رو می‌تونید با استفاد از ساخت یک نمونه از کلاس Response انجام بدید که در نهایت نتیجه نهایی کنترلتون به شکل زیر میشه:

<?php

namespace App\Controller;

use Symfony\Component\HttpFoundation\Response;

class ArticleController
{
    public function homepage()
    {
        return new Response('OMG! My first page already! WOOO!');
    }
}

خب شاید براتون عجب باشه که این خط زیر چیه من اضافه کردم

use Symfony\Component\HttpFoundation\Response;

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

حالا اگر پروژه رو دوباره باز کنید و به صفحه اول برید با تصویر زیر رو به رو میشید:

اولین کنترل موفق برای سیمفونی
اولین کنترل موفق برای سیمفونی

خب حالا روش سخت نوشت مسیریابی و کار کردن با کنترل رو یاد گرفتید، روش آسونش رو در آموزش بعدی توضیح میدم.

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

کد این قسمت رو می‌تونید از این جا ببینید.

با نظراتتون خوشحالم کنید!



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