بررسی ساختار فریمورکی بر پایه MVC
در این مقاله ، شرکت پلاتین ، 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 مشاهده می شود که دربرگیرندهٔ یکسری فایل مختلف می باشد که این فایلهای پیشفرض پس از اجرای کامپوزر ساخته میشوند و به طور مستقیم ارتباطی با آنها نخواهیم داشت بلکه پشت صحنه فعال خواهند بود.


