در این مقاله ، شرکت پلاتین ، Folder Structure فریمورکی را بررسی می کند که بر پایهٔ معماری MVC توسعه خواهد داد.
برای آموزش ، به ادامه مقاله می پردازیم.
داریم:
۱ |
mvc ├── app │ ├── Base │ │ ├── Config │ │ │ └── Database.php │ │ ├── Controllers │ │ │ └── DefaultController.php │ │ ├── Models │ │ │ └── User.php │ │ └── Views │ │ └── default │ │ ├── about.php │ │ ├── homepage.php │ │ ├── notfound.php │ │ └── users.php │ └── Core │ ├── App.php │ ├── BaseController.php │ ├── Interfaces │ │ ├── ControllerInterface.php │ │ └── UserInterface.php │ └── Routing.php ├── composer.json ├── public │ ├── css │ │ └── styles.css │ ├── index.php │ ├── .htaccess │ └── js │ └── app.js └── vendor ├── autoload.php └── composer ├── autoload_classmap.php ├── autoload_namespaces.php ├── autoload_psr4.php ├── autoload_real.php ├── autoload_static.php ├── ClassLoader.php ├── installed.json |
همانطور که می بینید، برای این پروژه نامی دلخواه مانند
mvc
در نظر گرفتهایم که داخل بخش روت پروژه فایل و فولدرهای زیر را مشاهده می کنیم:
۱ |
mvc ├── app ├── composer.json ├── public └── |
فولدر app
مکانی است که کامپوننت های اصلی این فریمورک در آن قرار میگیرند. فایل composer.json
هم میتواند دربرگیرندهٔ اطلاعات مرتبط با وابستگیهای پروژه باشد اما چون در این پروژه از هیچگونه لایبرری دیگری استفاده نخواهد شد ، نام هیچگونه وابستگی در این فایل درج نخواهد شد بلکه صرفاً به منظور قابلیت Autoloading از این فایل استفاده خواهیم کرد.
فولدر public
نیز حاوی فایلی است که نقش Bootstrap یا «نقطهٔ شروع برنامه» را خواهد داشت مضاف بر اینکه فایلهای css ، Java script ، تصاویر و … را میتوان در این فولدر قرار داد (در حقیقت، این فولدر نقش همان فولدر public_html
در هاستهای اشتراکی را دارد.)
در نهایت، به فولدر vendor
میرسیم که ارتباط تنگاتنگی با فایل composer.json
دارد که شامل فایلهای مرتبط با وابستگیهای پروژه و همچنین فایل مهمی تحت عنوان autoload.php
میباشد.
بررسی فولدر app
پیش از این گفته شد که این فولدر حاوی اصلیترین ریسورس های فریمورک ما می باشد که حاوی فولدرها و فایلهای زیر است:
۱ |
app ├── Base │ ├── Config │ │ └── Database.php │ ├── Controllers │ │ └── DefaultController.php │ ├── Models │ │ └── User.php │ └── Views │ └── default │ ├── about.php │ ├── homepage.php │ ├── notfound.php │ └── users.php └── Core ├── App.php ├── BaseController.php ├── Interfaces │ ├── ControllerInterface.php │ └── UserInterface.php └── |
در این فولدر، دو پوشه تحت عناوین Core
و Base
داریم به طوری که Core
به منزلهٔ کِرنِل این فریمورک است و Base
هم ماژول (کامپوننت) پیشفرضی است که بر پایهٔ کِرنِل نوشته شده است.
درون فولدر Core
، فایلی تحت عنوان App.php
را مشاهده می کنیم که در این فایل مشخص میشود بر اساس URL که کاربر وارد کرده، کدام کنترلر باید فراخوانی گردد. فایل دیگر BaseController.php
نام دارد که سایر کنترلرهای این فریمورک از آن ارثبری می کنند. سپس به فولدری تحت عنوان Interfaces
میرسیم که میتوانیم کلیهٔ اینترفیسهای اپلیکیشن خود را داخل این فولدر تعریف کنیم به طوری که به صورت پیشفرض دو اینترفیس تحت عناوین ControllerInterface.php
و UserInterface.php
درون آن تعریف شده است و در آخر به فایل Routing.php
میرسیم که مشخص کننده ی لینکهای معتبر می باشد که کاربران میتوانند مورد استفاده قرار دهند.
پیش از این گفته شد که این فریمورک یک کامپوننت اصلی و پیشفرض به نام Base
را دارد که در ادامه به بررسی فولدرها و فایلهای داخل آن میپردازیم. ابتدا فولدری داریم تحت عنوان Config
که حاوی فایلی به نام Database.php
می باشد که کلیهٔ کانفیگهای ارتباط با MySQL درون این فایل تنظیم شدهاند (چنانچه علاوه بر سیستم مدیریت پایگاه دادهٔ MySQL بخواهیم از دیتابیسهای دیگری من جمله SQLite استفاده کنیم، به راحتی قادر خواهیم بود تا داخل این فولدر کلاسهای مرتبط دیگری بسازیم.) در ادامه، میبینیم که ساختار MVC در قالب فولدرهای Models
،Controllers
و Views
پیادهسازی شده است.
داخل فولدر Controllers
فایلی تحت عنوان DefaultController.php
وجود دارد که به منزلهٔ کنترلر پیشفرض این کامپوننت می باشد به طوری که در نهایت کلیهٔ ریکوئستها به این کنترلر و متدهای داخل آن ختم میشوند. داخل فولدر Models
فایلی داریم به نام User.php
که به منزلهٔ مدلی برای ارتباط با جدولی حاوی اطلاعات کاربران سایت می باشد و داخل فولدر Views
برای آنکه کلیهٔ متدهای هر کنترلر مشخص باشند، پوشهای تحت عنوان default
که مرتبط با نام کنترلر پیشفرض است تعریف کرده سپس کلیهٔ ویوهای این کنترلر را داخل آن تعریف کردهایم (این فایلها حاوی کدهای Html و Css هستند که در نهایت در معرض دید کاربران قرار خواهند گرفت.) لازم به یادآوری است که نحوهٔ نامگذاری فایلهای ویو با متدها یا اَکشنهایی که داخل کنترلر تعریف شدهاند یکسان است. به طور مثال، ویوِ مرتبط با متدی تحت عنوان ()homepage
در فایلی با نام homepage.php
قرار دارد.
بررسی فولدر public
پیش از این گفتیم که این فولدر نقشی همچون فولدر public_html
در هاستهای اشتراکی را دارا است و به نوعی نقطهٔ شروع اپلیکیشن می باشد به طوری که حاوی فولدرها و فایلهای زیر است:
۱ |
public ├── css │ └── styles.css ├── index.php ├── .htaccess └── js |
همچنین میتوان کلیهٔ فایلهای سیاساس، جاوااسکریپت، تصاویر و … را داخل این فولدر قرار داد و همانطور که میبینیم، فولدری تحت عنوان css
وجود دارد که حاوی فایلی به نام styles.css
می باشد که کدهای سیاساس کاستومایزشدهٔ خود را داخل آن خواهیم نوشت. همچنین فولدر دیگری را شاهد هستیم به نام js
که داخلش فایلی ساختهایم تحت عنوان app.js
که همچون مورد قبل، میتوان کلیهٔ کدهای جاوااسکریپتی خود را داخل این فایل نوشت و یا بسته به نیاز خود، فایلهای جاوااسکریپتی مختلفی داخل این فولدر ساخته و بعداً در ویو مورد استفاده قرار داد.
دو فایل بسیار مهم داخل این فولدر قرار دارند تحت عناوین htaccess.
و index.php
که فایل اول این وظیفه را دارا است تا کلیهٔ ریکوئستهای ارسالی را به فایل index.php
بفرستد و این فایل نیز این ریکوئستها را برای فایل App.php
که بخشی از کِرنِل این فریمورک است ارسال نموده و در آنجا درخواستها پردازش میشوند.
بررسی فولدر vendor
در نهایت به فولدری میرسیم که مرتبط با پَکیج مَنِجِر زبان php تحت عنوان Composer است. همانطور که پیش از این اشاره شد ، این فولدر دربرگیرندهٔ کلیهٔ دیپندنسیها یا لایبرریهایی می باشد که پروژهٔ ما به آنها وابسته است به طوری که در این فولدر داریم:
۱ |
vendor ├── autoload.php └── composer ├── autoload_classmap.php ├── autoload_namespaces.php ├── autoload_psr4.php ├── autoload_real.php ├── autoload_static.php ├── ClassLoader.php ├── installed.json |
همچنین به منظور پیادهسازی مفهومی تحت عنوان Autoloading، به فایلی داخل این فولدر تحت عنوان autoload.php
ارجاع خواهیم داد که این امکان را در اختیارمان قرار میدهد تا بدون نیاز به استفاده از دستوراتی همچون include
یا require
بتوان کلاسهای مورد استفادهٔ خود را در همه جای اپلیکیشن ایمپورت نماییم.
همانطور که ملاحظه میشود، فولدری به نام composer
مشاهده می شود که دربرگیرندهٔ یکسری فایل مختلف می باشد که این فایلهای پیشفرض پس از اجرای کامپوزر ساخته میشوند و به طور مستقیم ارتباطی با آنها نخواهیم داشت بلکه پشت صحنه فعال خواهند بود.