در دنیای توسعه وب، فریمورکها ساختاری منظم برای ساخت اپلیکیشنهای تحت وب فراهم میکنند. آنها با ارائه ابزارها و قراردادهای از پیش تعریفشده، به سادهتر شدن و سرعت بخشیدن به فرایند توسعه کمک میکنند. بااینحال، ساخت فریمورک اختصاصی میتواند تجربهای ارزشمند برای یادگیری باشد و کنترل کاملی بر اپلیکیشن در اختیار شما قرار دهد. در این مقاله، مراحل ساخت یک فریمورک ساده PHP را از صفر بررسی میکنیم.
لینک گیتهاب را میتوانید در انتهای این مقاله پیدا کنید.
پیشنیازها
پیش از شروع، مطمئن شوید که PHP روی سیستم شما نصب شده است. این فریمورک بر مفاهیم بنیادی تمرکز دارد؛ بنابراین، گزینهای مناسب برای یادگیری و پیادهسازی پروژههای کوچک است.
راهاندازی پروژه
ابتدا ساختار پروژه و فایلهای ضروری آن را ایجاد میکنیم.
// Autoloader.php
require_once 'Autoloader.php';
$router = new Core\Router();
// تعریف مسیرها
$router->add('', ['controller' => 'PageController', 'action' => 'index']);
$router->add('folder1', ['controller' => 'PageController', 'action' => 'folderOne']);
$router->add('folder2', ['controller' => 'PageController', 'action' => 'folderTwo']);
$router->add('{controller}/{action}');
// پردازش درخواست
$router->dispatch($_SERVER['QUERY_STRING']);
بارگذاری خودکار کلاسها (Autoloading)
برای بارگذاری پویای کلاسها به یک بارگذار خودکار یا Autoloader نیاز داریم.
// Autoloader.php
spl_autoload_register(function ($class) {
$class = str_replace('\\', '/', $class);
$file = __DIR__ . '/' . $class . '.php';
if (file_exists($file)) {
require_once $file;
}
});
ایجاد کنترلر اصلی (Core Controller)
کنترلر اصلی فریمورک، مسئول مدیریت اکشنهای مربوط به مسیرها خواهد بود.
// Controller.php
namespace Core;
abstract class Controller
{
protected $route_params = [];
public function __construct($route_params)
{
$this->route_params = $route_params;
}
public function __call($name, $args)
{
$method = $name . 'Action';
if (method_exists($this, $method)) {
if ($this->before() !== false) {
call_user_func_array([$this, $method], $args);
$this->after();
}
} else {
throw new \Exception("Method $method not found in controller " . get_class($this));
}
}
protected function before()
{
}
protected function after()
{
}
}
پیادهسازی مسیریاب (Router)
مسیریاب یکی از اجزای کلیدی فریمورک است که URLها را به کنترلرها و اکشنهای مربوط به آنها نگاشت میکند.
// Router.php
namespace Core;
class Router
{
protected $routes = [];
protected $params = [];
// ... (برای مشاهده کد کامل، به منبع مراجعه کنید)
public function dispatch($url)
{
// ... (برای مشاهده کد کامل، به منبع مراجعه کنید)
}
// ... (برای مشاهده کد کامل، به منبع مراجعه کنید)
}
ایجاد کلاس View
برای مدیریت و نمایش قالبهای صفحات، به یک کلاس اختصاصی نیاز داریم.
// View.php
namespace Core;
class View
{
public static function render($view, $args = [])
{
// ... (برای مشاهده کد کامل، به منبع مراجعه کنید)
}
}
پیادهسازی PageController
در نهایت، یک کنترلر نمونه ایجاد میکنیم.
// PageController.php
namespace App\Controllers;
use \Core\View;
class PageController extends \Core\Controller
{
public function indexAction()
{
View::render('Home/index', [
'title' => 'HomePage',
'content' => "I'm in the homepage"
]);
}
public function folderOne()
{
View::render('Home/index', [
'title' => 'Folder 1',
'content' => "I'm in folder1"
]);
}
public function folderTwo()
{
View::render('Home/index', [
'title' => 'Folder 2',
'content' => "I'm in folder2"
]);
}
}
ایجاد قالب View
در ادامه، یک قالب HTML ساده برای نمایش صفحات ایجاد میکنیم.
<!-- Home/index.php -->
<!DOCTYPE html>
<html>
<head>
<title><?= $title ?></title>
</head>
<body>
<h1>سلام</h1>
<div><?= $content ?></div>
</body>
</html>
پیکربندی فایل .htaccess
برای ایجاد URLهای سادهتر و خواناتر، از فایل .htaccess استفاده میکنیم.
# .htaccess
RewriteEngine On
RewriteRule ^(App|Core)/ - [F,NC]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule ^(.*)$ index.php?$1 [L,QSA]
جمعبندی
در این مقاله، نخستین گامها برای ساخت یک فریمورک ساده PHP را بررسی کردیم. این فریمورک پایهای مناسب برای پروژههای تحت وب فراهم میکند و منبعی کاربردی برای یادگیری مفاهیم توسعه وب به شمار میرود.
با ادامه توسعه و افزودن قابلیتهای جدید به فریمورک، میتوانید درک عمیقتری از توسعه وب و معماری نرمافزار به دست آورید.

دیدگاهها
ثبت دیدگاه