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

آموزش ساختار فایل، مسیریابی و کنترلرخب تو این بخش که در ادامه بخش اول که یک پروژه سیمفونی ساختیم، میخوایم در رابطه با ساختار فایل‌های سیمفونی صحبت کنیم و این که چطوری یک کنترلر (Controller) و مسیریابی (Route) بنویسیم برای یک پروژه سیمفونی.زمانی که شما پوشه پروژه رو باز کنید با ساختار پوشه‌های زیر رو به رو میشیدbinconfigpublicsrcvarvendorخب به ترتیب از بالا به پایین شروع می‌کنیم به تعریف هر پوشه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 رو که من دارم استفاده می‌کنم برو از این آدرس بیار نه از یک آدرس اشتباهی، این قسمت رو بعدا بیشتر باهاش آشنا میشم و خیلی استفاده می‌کنیم.حالا اگر پروژه رو دوباره باز کنید و به صفحه اول برید با تصویر زیر رو به رو میشید:اولین کنترل موفق برای سیمفونیخب حالا روش سخت نوشت مسیریابی و کار کردن با کنترل رو یاد گرفتید، روش آسونش رو در آموزش بعدی توضیح میدم.راستی! کد هر قسمت از آموزش رو می‌تونید تو گیت‌هاب من داشته باشید که برای هر آموزش یک تگ قرار دادم تا بتونید کد هر قسمت از آموزش رو جدا داشته باشید.کد این قسمت رو می‌تونید از این جا ببینید. با نظراتتون خوشحالم کنید!قسمت بعدی این آموزش رو که در رابطه با نحوه آسان نوشتن مسیریابی و دریافت اطلاعات از مسیر هست رو در اینجا بخونید.