شرکت پلاتین ، با مقاله ساخت کلاس Routing در خدمت شما می باشد.
در بررسی ساختار فریمورکی که در این مقاله توسعه خواهیم داد، دیدیم که فولدر mvc
حاوی فایل و فولدرهای زیر می باشد:
mvc ├── app ├── composer.json ├── public └── vendor
در این مقاله ، به بررسی فولدر public
پرداختیم و قصد داریم تا به بررسی فولدر app
بپردازیم. برای همین منظور، در مسیر روت پروژه با استفاده از کامند زیر فولدری تحت عنوان app
میسازیم:
/var/www/mvc$ mkdir app
پیش از این گفته شد که قرار است تا این پوشه حاوی فولدرها و فایلهای زیر باشد:
Core ├── App.php ├── BaseController.php ├── Interfaces │ ├── ControllerInterface.php │ └── UserInterface.php └── Routing.php
در همین راستا، در این مقاله قصد داریم تا فایل Routing.php
را بررسی کنیم. بر اساس استاندارد PSR-4: Autoloader که در مقاله گذشته با مفهوماش آشنا شدیم، ابتدا پوشهای تحت عنوان Core
ساخته سپس با استفاده از کامند زیر این فایل را میسازیم:
/var/www/mvc/app/Core$ touch Routing.php
ابتدا کدهای زیر را داخل این فایل درج نموده سپس به بررسی آنها خواهیم پرداخت:
<?php namespace Core; class Routing { public $routes = [ [ 'route' => '', 'module' => 'Base', 'controller' => 'DefaultController', 'action' => 'homepage', ], [ 'route' => 'default/homepage', 'module' => 'Base', 'controller' => 'DefaultController', 'action' => 'homepage', ], [ 'route' => 'default/about', 'module' => 'Base', 'controller' => 'DefaultController', 'action' => 'about', ], [ 'route' => 'default/users', 'module' => 'Base', 'controller' => 'DefaultController', 'action' => 'users', ] ]; public function __construct() { return $this->routes; } }
پس از درج تگ آغازین php?>
ابتدا کیورد namesapce
را می نویسیم سپس نام پوشهای که داخل آن قرار داریم را نوشته که در این مثال Core
می باشد. در واقع، کاری که نِیماِسپیس انجام میدهد ، این می باشد که مشخص میسازد فایل Routing.php
دقیقاً در چه مسیری قرار داد و به کدام نِیماِسپیس تعلق دارد؛ سپس در ادامه مقاله فایل composer.json
را تکمیل میکنیم تا نِیماِسپیسی تحت عنوان Core
در این پروژه به رسمیت شناخته شود.
همانطور که میبینیم، کلاسی تعریف کردهایم به نام Routing
که حاوی یک پراپرتی تحت عنوان routes$
از جنس public
می باشد که این امکان را برایمان فراهم می کند تا از هر جای پروژه به آن دسترسی داشته باشیم. نیاز به توضیح نیست که routes$
آرایهای چندبُعدی است که در آن یکسری URL پیشفرض تعریف کردهایم به طوری که اگر کاربر هر لینکی به غیر از آنچه در کلیدهای route
در این آرایه تعریف شده را در آدرسبار درج نماید، با ارور ۴۰۴ مواجه خواهد شد. برای مثال، آرایهٔ مربوط به هومپیج سایت را مد نظر قرار میدهیم:
[ 'route' => 'default/homepage', 'module' => 'Base', 'controller' => 'DefaultController', 'action' => 'homepage', ]
در آرایهٔ فوق ، کلیدی تحت عنوان route
داریم که مشخصاً لینکی که به هومپیج سایت منتج میشود را تعیین میکند. سپس کلیدی به نام module
وجود دارد که مقدار در نظر گرفته شده برای آن Base
است که به منزلهٔ ماژول اصلی این فریمورک میباشد که در فصول آتی آن را خواهیم ساخت. کلیدهای controller
و action
نیز به ترتیب مشخصکنندهٔ کنترلر و متدی در ماژول Base
هستند که پس از وارد کردن لینک default/homepage
فراخوانی خواهند شد.
لازم به یادآوری می باشد کانستراکتور متدی میباشد که به محض ساخت یک آبجکت از روی کلاسمان فراخوانی خواهد شد. از همین روی، در کانستراکتور کلاس Routing.php
دستور دادهایم تا به محض ساخت یک آبجکت از روی این کلاس، پراپرتی routes$
ریترن گردد. اکنون به منظور تست، مجدد به فایل index.php
بازگشته و آن را به صورت زیر تغییر میدهیم:
<?php ini_set('display_errors', '1'); require_once __DIR__ . '/../vendor/autoload.php'; $routingObj = new Core\Routing(); dd($routingObj); function dd($input) { echo "<pre>"; var_dump($input); echo "</pre>"; die; }
با رفتن به مسیر http://mvc.local
در مرورگر، در خروجی با ارور زیر مواجه خواهیم شد:
Fatal error: Uncaught Error: Class 'Core\Routing' not found in /var/www/mvc/public/index.php:5 Stack trace: #0 {main} thrown in /var/www/mvc/public/index.php on line 5
این ارور حاکی از آن می باشد که کلاسی با نِیماِسپیس Core\Routing
که در خط پنجم فایل index.php
استفاده شده است یافت نشد. دلیل این مسئله آن می باشد که در فایل composer.json
چنین نِیماِسپیسی تعریف نشده است.