ساخت اولین صفحه در Symfony

ساخت اولین صفحه در Symfony

شاید متوجه شده باشید که بیشتر فایل‌ها بصورت یکپارچه در پوشه‌های app/ و src/ قرار دارند. در این پست تمرکز ما بر روی این دو پوشه خواهد بود.

 

پوشه‌ی src/ تمام کلاس‌های پی اچ پی که درست می کنیم را نگهداری می کند و app/ بقیه چیزها را نگهداری می کند: مثل فایل‌های تنظیمات و قالب‌ها.  در حال حاظر از بقیه دایرکتوری‌ها چشم‌پوشی و بر روی src/ و app/ کار خواهیم کرد.

 

اگر هنوز Symfony را نصب نکرده اید به قسمت قبل برگردید و آن را نصب و راه اندازی کنید.

 

ساخت اولین صفحه

 

آیا صفحه اصلی که در قسمت قبل دیدیم را به یاد دارید؟ این صفحه بطور پیشفرض از فایل DefaultController.php می آید. آن را پاک کنید!

 

آموزش فریم ورک سیمفونی ساخت اولین صفحه

 

حال یک یک پروژه کاملا خالی داریم که می توانیم فایل‌ها و کدهای خود را داشته باشیم. وب سرور خود با دستور php bin/console server:run اجرا کنید و به صفحه‌ای که در آدرس http://localhost:8000/ است مراجعه کنید.

 

No route found for "GET /"

 

همانطور که مشاهده می کنید با خطای 404 روبرو می شویم. به عبارتی سیمفونی می گوید “در اینجا صفحه‌ای وجود ندارد“.

 

symfony 404

 

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

 

فرض کنید پروژه‌ای می خواهیم درست کنیم که لیست اسامی موسیقیدانان بزرگ تاریخ را جستجو و نمایش دهد. نام این پروژه را به دلخواه Musicians قرار می دهیم. اولین صفحه‌ای که قرار است با سیمفونی درست کنیم وظیفه نمایش نام موسیقیدان خاصی را بر عهده دارد، به عنوان مثال Ludwig van Beethoven.

 

ساخت صفحه در Symfony یا هر فریک ورک مدرن دیگری مثل Laravel در دو مرحله انجام می شود:

 

  1. Routeیک بخش کوچک از تنظیمات است که مشخص می کند URL باید چه باشد.
  2. Controllerتابعی است که صفحه را بنا می کند.

 

Namespace (فضای نام‌گذاری)

 

اگر با namespace در PHP آشنا نیستید، سه پاراگراف زیر این موضوع را خیلی سریع توضیح می دهد. این پاراگراف‌ها از مستندات PHP The Right Way انتخاب شده است:

 

فضای نام‌گذاری (Namespace) این مشکل را حل می‌کند. همان‌طور که در راهنمای رسمی PHP توضیح داده شده است، فضای نام‌گذاری در PHP مانند ساختار دایرکتوری در سیستم‌عامل عمل می‌کند. همان‌طور که دو فایل با نام‌های یکسان در دو دایرکتوری می‌توانند وجود داشته باشند، دو کلاس PHP با نام‌های یکسان در دو فضای نام‌گذاری جداگونه می‌توانند وجود داشته باشند. به همین سادگی!

 

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

 

یک روش توصیه شده در استفاده از فضای‌ نام‌گذاری در راهنمای PSR-0 موجود است، که ساختاری استاندارد برای فایل و کلاس ایجاد می‌کند.


 

خوب، مرحله اول ساخت route است! اما در حقیقت می خواهیم از مرحله دوم شروع کنیم، بعدا دلیل این کار را خواهد دید. یک کلاس جدید به نام MusicianController در AppBundle/Controller درست کنید:

 

 

اگر می خواهید از namespaceها بطور خودکار در فایل شما اضافه شوند می توانید از افزونه idea-php-symfony2-plugin برای ویرایشگر PHPstrom استفاده کنید.

 

خوب! این controller ماستتابعی که بالاخره صفحه ما را خواهد ساختنامی که برای آن انتخاب می کنید مهم نیست. تا اینجا مرحله دوم را انجام دادیم،‌ حال بر می گردیم تا مرحله اول را به پایان برسانیم. برای ساخت route یا مسیر، از حاشیه‌نویسی (comment) استفاده می کنیم. این حاشیه‌نویسی به عنوان تنظیمات مورد پردازش قرار می گیرد. تعریف مسیر را با /** شروع می کنیم و درون آن @Route با مقدار "/musician" اضافه می کنیم:

 

 

خیلی خوب، این route ماست و URL برای صفحه /musician است.

 

بازگرداندن پاسخ (Response)

 

همانطور که گفته شد: controller یک تابع است که در زیر آمده است و وظیفه آن ساخت صفحه است. تنها قانون controller این است که باید یک شی Response سیمفونی برگرداند.

 

توجه داشته باشید response چه HTML باشد یا یک JSON یا یک فایل PDF، وظیفه ما به عنوان یک توسعه دهنده همیشه درک درخواست‌های ارسال شده و برگرداندن پاسخ باشد. Symfony در حوزه این ایده مدل سازی شده است.

 

بیایید همه چیز را همینطور ساده نگاه داریم:

 

 

کلاس Response یکی از کامپوننت‌های HttpFoundation است. توجه داشته باشید که با استفاده از use آدرس کامپوننت را در اول صفحه قرار دهیم. در مورد محتوایی که برگشت داده می شود از “Ludwig van Beethoven” استفاده می کنیم!

 

 

همین!

 

ما تا اینجا یک فایل با یک تابع ایجاد کردیم که در حال حاضر شامل یک route و یک controller است که محتوایی را برگشت بدهد!

 

اگر مرورگر خود را refresh کنید، خواهید دید که کار نخواهد کرد. چون باید به آدرس /musician مراجعه کنید. بله! این اولین صفحهSymfony شماست که در 10 خط درست کردید. به اندازه کافی ساده بود نه؟ 🙂

 

طراحی سایت

 

در بخش بعدی URL های پویا درست می کنیم.


  • امیرحسین

    سلام.آموزش ها عالی هستن!
    یک سوال داشتم.سیستم عاملتون چی هست؟ و میزکارتون چی هست؟ مرسی

  • ژورا

    ای بابا …
    پاتریک این php کهنه رو ولش کن. از node.js بنویس.

    • پاتریک

      🙂 چشم به از Node هم پست میزارم. 😉

  • حسین

    آقا من اول با لاراول شروع کردم بعد خواستم سیفونی رو یاد بگیرم …از منایع زیادی هم استفاده کردم ، ولی وسطش ول کردم!….چون واقعا افتضاح بود نسبت به لاراول یا حتی فریم ورک های دیگه…..کلی دستور اضافه باید مینوشتی…, و حتی کلی چیز بی معنی وسطش…که قطعا توی نسخه های بالا اصلاح میشن…عوض اینکه دستورات داخلش کمتر از خود زبان بشن ببیشتر هم میشن!…..البته درسته که توی سیمفونی دست آدم باز تره واسه پروژه های بزرگ و اختیارات بیشتری داری…. این فقط نظر منه ها شاید شما چیز دیگه ای بگین….شاید یکی از مزیتاش اون تولبار زیر صفحه باشه که خیلی جاها کمک میکنه ولی واقعا توی زمینه ها ی دیگه اصلن خوب نیست….مثلا توی کار با فرم دستورا قشنگ دو برابر میشن از حالت عادی هرچند که امنه….یا مثلا توی اهراز هویت که بازم یکم به نظرم پیچیدس ….ولی لاراول خیلی واضح و خوبه……به هر حال من توی برنامم چند تا فریم ورک دیگه هم هست که باید یاد بگیرم …ولی فکر نمیکنم مثل لاراول بشن

    • پاتریک

      بله من نیز ابتدا با لاراول شروع کردم اما بعد از مدتی به دلایلی به سیمفونی سوییچ کردم. بله شاید سیمفونی در نگاه اول راحتی کار نسبت به لاراول را نداشته باشد اما توجه داشته باشیم که اگر کامپوننت‌های سیمفونی نبود لاراولی هم نبود! یکی از خصوصیات خوب لاراول اینه که این کامپوننت‌ها را به نحو عالی سازماندهی کرده.بله قبول دارم لاراول کامیونیتی و کلی امکانات بزرگتری دارد و پروژه را با کمترین کد می شود سریعتر توسعه داد، اما همانطور که در مستندات سیمفونی آمده است، با یادگیری سیمفونی بسیاری از مفاهیم مهم در پشت پرده توسعه وب را نیز یاد می گیرید و به یک توسعه دهنده پخته تر تبدیل می شوید. بله نظر من نیز در این مورد موافق است: "البته درسته که توی سیمفونی دست آدم باز تره واسه پروژه های بزرگ و اختیارات بیشتری داری". اما یکی از مهمترین دلایلی که سیمفونی را انتخاب کردم، به شدت stable بودن آن است.
      این خیلی خوبه که می خواهید چندین فریم‌ورک دیگر را نیز تست کنید. اما به این توجه نکنید که چون فلان فریم ورک دارای آمار بیشترین استفاده یا محبوبیت را دارد، پس فقط آن فریم روک موفق است. فریم ورک‌های Yii یا codeigniter نیز بسیار موفق هستید. در کل تمام فریم ورک‌ها از نظر مفهوم به یک صورت ساخته شده اند و این به کاربر انتخاب آن. توجه داشته باشید که این فقط نظر شخصی من است، مهم شما هستید که به عنوان یک هکر، بهترین ابزار را انتخاب کنید.
      در آخر خوشحالم که وقت می گذارید و نظر می دهید موفق باشید دوست عزیز 🙂