گام 3: حرکت از صفر به سمت محصول نهایی

5.0 version
Maintained

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

من پیشروی سریع را دوست دارم. می‌خواهم پروژه‌ی کوچک‌مان به سر‌یع‌ترین وجه ممکن حیات یابد. دوست دارم همین الان در محیط عمل‌آوری باشد. از آنجایی که هنوز چیزی توسعه نداده‌ایم، با استقرار یک صفحه‌ی «دردست احداث» زیبا و ساده کار را آغاز می‌کنیم. شما عاشقش خواهید شد!

برای پیدا‌کردن یک GIF ساده‌ی «در دست احداث» و در عین حال ایده‌آل، انیمیشنی و با سبکی قدیمی، کمی زمان صرف کنید. من تصمیم دارم از این استفاده کنم.

../_images/under-construction.gif

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

آماده‌کردن پروژه

به کمک رابط خط فرمان symfony که قبلاً با هم نصب کردیم، یک پروژه‌ی سیمفونی جدید ایجاد نمایید:

1
2
$ symfony new guestbook --version=5.0
$ cd guestbook

این فرمان یک پوشش کوچک بر روی Composer است که ایجاد پروژه‌های سیمفونی را آسان می‌کند. این فرمان از یک اسکلت پروژه‌ که شامل حداقل وابستگی‌هاست، استفاده می‌کند. این وابستگی‌ها در حقیقت کامپوننت‌های سیمفونی هستند که تقریباً برای هر پروژه‌ای الزامی‌اند: یک ابزار کنسولی و انتزاع‌ HTTP که برای ایجاد وب اپلیکیشن‌ها لازم است.

اگر به مخزن مربوط به شالوده‌ی پروژه در GitHub نگاهی بیاندازید، متوجه می‌شوید که تقریباً خالی است. تنها یک فایل composer.json وجود دارد. با این حال پوشه‌ی guestbook پر از فایل است. چطور همچین چیزی امکان دارد؟ جواب این مسئله در بسته‌ی symfony/flex است. سیمفونی Flex یک افزونه‌ی Composer است که خود را به فرآیند نصب قلاب می‌کند و درصورتی که بسته‌ای دارای یک recipe باشد،‌ آن را اجرا می‌کند.

مدخل اصلی یک Recipe در سیمفونی، یک فایل manifest است که عملیات‌های لازم برای ثبت خودکار یک بسته در یک اپلیکیشن سیمفونی را شرح می‌دهد. برای نصب یک بسته در سیمفونی، هرگز نیازی به خواندن فایل README نخواهید داشت. اتوماسیون یکی از ویژگی‌های کلیدی سیمفونی است.

همچنین در صورتی که Git بر روی سیستم ما نصب باشد،‌ فرمان symfony new یک مخزن Git برای ما ایجاد کرده و اولین commit را به آن اضافه می‌کند.

نگاهی به ساختار پوشه‌ها بیاندازید:

1
2
3
4
5
6
7
8
9
├── bin/
├── composer.json
├── composer.lock
├── config/
├── public/
├── src/
├── symfony.lock
├── var/
└── vendor/

پوشه‌ی bin/، حاوی مدخل اصلی CLI یعنی console است. شما همیشه از آن استفاده خواهید کرد.

پوشه‌ی config/ از تعدادی فایل پیکربندی پیش‌فرض و مخسوس تشکیل شده است. برای هر بسته، یک فایل وجود دارد. احتمال اینکه بخواهید آن‌ها را تغییر دهید بسیار ضعیف است، اعتماد به تنظیمات پیش‌فرض همیشه ایده‌ی خوبی است.

پوشه‌ی public/، پوشه‌ی root یا اصلی وبسایت است و اسکریپت index.php، مدخل اصلی تمام منابع داینامیک HTTP است.

پوشه‌ی src/ میزبان تمام کدهایی است که خواهید نوشت. این پوشه جایی است که بیشتر زمان خود را در آن می‌گذارنید. به‌صورت پیش‌فرض،‌ تمام کلاس‌های این پوشه از namespace App استفاده می‌کنند. این خانه و منبعِ بخش‌ منطقی برنامه‌ی شماست. سمفونی در اینجا حرفی کمی برای گفتن دارد.

پوشه‌ی var/ شامل نهان‌سازی‌ها، لاگ‌ها و فایل‌های تولیدشده در طول اجرای اپلیکیشن است. می‌توانید از این پوشه صرف نظر کنید و به آن دست نزنید. این تنها پوشه‌ای است که در محیط پروداکشن، باید دسترسی write به آن ممکن باشد.

پوشه‌ی vendor/ شامل تمام بسته‌هایی است که توسط Composer نصب گردیده‌اند (از جمله خود سیمفونی). این در حقیقت اسلحه‌ی مخفی ما برای افزایش بهره‌وری است. بیایید از ابداع دوباره‌ی چرخ، صرف نظر کنیم. شما برای انجام بخش‌های سخت کار، به کتابخانه‌های موجود تکیه خواهید کرد. این پوشه توسط Composer مدیریت می‌شود. هرگز به آن دست نزنید.

فعلا این تمام آن چیزی ست که لازم است بدانید.

ایجاد برخی منابع عمومی

تمام محتویات پوشه‌ی public/، برای مرورگر قابل دسترس است. برای نمونه اگر فایل گیف انیمیشنی‌مان ( under-construction.gif بنامیدش) را به پوشه‌ی جدید public/images/ منتقل کنیم، آنگاه از طریق آدرس URL‌‌ی شبیه به https://localhost/images/under-construction.gif در دسترس خواهد بود.

تصویر gif من را از اینجا دانلود کنید.

1
2
$ mkdir public/images/
$ php -r "copy('http://clipartmag.com/images/website-under-construction-image-6.gif', 'public/images/under-construction.gif');"

راه‌اندازی یک وب سرور محلی

رابط خط فرمان symfony، یک وب سرور بهینه‌شده برای کار توسعه را به همراه دارد. مطمئناً از اینکه بگویم این وب سرور با سیمفونی بسیار خوب کار می‌کند، شگفت‌زده نمی‌شوید. البته هرگز نباید از آن در محیط پروداکشن استفاده کنید.

از داخل پوشه‌ی پروژه، وب سرور را در بک‌گراند (با پرچم -d) استارت بزنید.

1
$ symfony server:start -d

سرور روی اولین درگاه (port) آزادی که با 8000 شروع شود آغاز به کار می‌کند. به عنوان یک میانبر، مرورگر را از طریق CLI باز کنید:

1
$ symfony open:local

مرورگر موردعلاقه‌ی شما یک تب جدید باز کرده و چیزی مشابه این را نمایش می‌دهد:

نکته

برای عیب‌یابی مشکلات، فرمان symfony server:log را اجرا کنید. این فرمان، لاگ‌های وب‌سرور، PHP و خود اپلیکیشن را نشان می‌دهد.

به آدرس /images/under-construction.gif بروید. آیا چنین چیزی می‌بینید؟

راضی هستید؟ بیایید کارمان را commit کنیم:

1
2
$ git add public/images
$ git commit -m'Add the under construction image'

افزودن favicon

برای جلوگیری از «اسپم‌شدن» توسط خطاهای ۴۰۴ در لاگ‌ها به علت نیافتن favicon برای درخواست‌های مرورگر، بیایید یک favicon اضافه کنیم:

1
2
3
$ php -r "copy('https://symfony.com/favicon.ico', 'public/favicon.ico');"
$ git add public/
$ git commit -m'Add a favicon'

آماده‌سازی برای عمل‌آوری

نظرتان در مورد مستقرکردن کارمان در محیط عمل‌آوری چیست؟ می‌دانم که حتی یک صفحه‌ی HTML مناسب برای خوش‌آمدگویی به کاربرانمان هم نداریم. اما اینکه بتوانیم تصویر کوچک «دردست احداث» را بر روی یک سرور عمل‌آوری ببینیم، یک گام عالی رو به جلو خواهد بود. شما حتماً با این شعار آشنا هستید: استقرار را زود و مکرر انجام بده.

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

من تصمیم خودم را گرفته‌ام، و آن SymfonyCloud است. SymfonyCloud، تمام چیزهایی که به آن احتیاج داریم را فراهم‌کرده و به تأمین‌سرمایه‌ی توسعه سیمفونی کمک می‌کند.

رابط خط فرمان symfony به صورت داخلی از SymfonyCloud پشتیبانی می‌کند. بیایید یک پروژه‌ی SymfonyCloud ایجاد کنیم:

1
$ symfony project:init

این فرمان تعدادی فایل که برای SymfonyCloud لازم است را ایجاد می‌کند، یعنی فایل‌های .symfony/services.yaml، .symfony/routes.yaml، and .symfony.cloud.yaml.

آن‌ها را به Git بیافزاید و commit کنید:

1
2
$ git add .
$ git commit -m"Add SymfonyCloud configuration"

توجه

به علت اینکه فایل .gitignore تولید شده است و به صورت خودکار فایل‌هایی که نیاز به commit ندارند را مستثنی کرده است، استفاده از فرمانِ عام و خطرناک git add . به خوبی جواب می‌دهد و مشکلی ایجاد نمی‌کند.

پیش به سوی عمل‌آوری

زمان استقرار فرا رسیده است؟

یک پروژه‌ی SymfonyCloud ایجاد کنید:

1
$ symfony project:create --title="Guestbook" --plan=development

این فرمان کارهای زیادی انجام می‌دهد:

  • اولین‌بار که این فرمان را اجرا می‌کنید، اگر تا به حال احراز هویت نکرده‌اید، با اعتبارنامه‌های SymfonyConnect متعلق به خودتان، احراز هویت کنید.
  • این فرمان یک پروژه‌ی جدید بر روی SymfonyCloud تدارک می‌بیند (به ازای هر پروژه‌ی توسعه‌ای جدید،‌ ۷ روز به صورت رایگان دریافت می‌کند).

سپس مستقر کنید:

1
$ symfony deploy

کد با pushکردن آن به مخزن Git، مستقر می‌گردد. در پایان این فرمان، پروژه دارای یک دامنه مشخص خواهد بود که می‌توانید از آن برای دسترسی به پروژه استفاده کنید.

بررسی کنید که همه چیز به‌درستی کار می‌کند:

1
$ symfony open:remote

شما باید خطای ۴۰۴ دریافت کنید، اما رفتن به آدرس /images/under-construction.gif، باید کارمان را آشکار نماید.

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

نکته

اگر می‌خواهید پروژه را از روی SymfonyCloud حذف کنید، از فرمان project:delete استفاده کنید.


  • « Previous گام 2: معرفی پروژه
  • Next » گام 4: اتخاذ یک متدولوژی

This work, including the code samples, is licensed under a Creative Commons BY-NC-SA 4.0 license.