Как загрузить контроллер / создать роутер для php mvc framework
Я пишу облегченный php mvc framework для своего портфолио и как базовую установку для моих будущих разработок. Я застрял сейчас, потому что я пытаюсь использовать автозагрузчик PSR-4 через композитор. Я понимаю концепцию PSR-4 и т.д., но мне интересно, как я должен справиться с маршрутизацией.
Моя структура папок:
--|-Root---
index.php
composer.json
-----|-application------
--------|-controller----
--------|-model---------
--------|-core----------
-----------|-baseController.php
-----------|-Application.php
-----------|-baseView.php
-----------|-baseModel.php
--------|-view----------
--------|-config
-----------|-config.php
-----|-vendor------
--------|-autoload.php
-----|-assets------
Я довольно хорошо разбираюсь в php, но написать собственный фреймворк mvc - сложная задача, даже больше, потому что я никогда раньше не использовал стандарты PSR.
Теперь мои вопросы:
- Стоит ли вообще использовать роутер?
- Если да, то какой шаблон я должен использовать для достижения этого.
Итак, в моем index.php я определяю все константы для хранения каталогов, таких как ROOT, APP, VENDOR. Затем я загружаю vendor/autoload.php, созданный из моего composer.json. После autoload.php я загружаю и запускаю свою конфигурацию, вызывая этот код:
if(is_readable(APP . 'config/config.php'))
{
require APP . 'config/config.php';
//Initiate config
new AppWorld\Confyy\config();
}
else
{
throw new Exception('config.php file was not found in' . APP . 'config');
}
После настройки я настраиваю среду приложения, а затем запускаю приложение, вызывая:
// Start the application
new AppWorld\FrostHeart\Application();
Тогда мой baseController очень и очень тонкий:
<?php
namespace AppWorld\FrostHeart;
use AppWorld\FrostHeart\baseView as View;
abstract class baseController {
public $currentView;
public function __construct() {
//Initiate new View object and set currentView to this object.
$this->currentView = new View();
}
}
И это мой baseView.php:
<?php
namespace AppWorld\FrostHeart;
class baseView {
public function show($file, $data = null, $showTemplate = 1) {
if($data != null) {
foreach($data as $key => $value) {
$this->{$key} = $value;
}
}
if($showTemplate === 1) {
require VIEW_DIR . header . ".php";
require VIEW_DIR . $file . ".php";
require VIEW_DIR . footer . ".php";
}
elseif($showTemplate === 0)
{
require VIEW_DIR . $file . ".php";
}
}
}
мой config.php:
<?php
namespace AppWorld\Confyy;
class config {
public function __construct() {
$this->application();
$this->database();
}
public function application() {
/**
* Define application environment, defaults are:
*
* development
* live
*
*/
define("ENVIRONMENT", "development");
//Define base url
define("BASE_URL", "http://" . $_SERVER['SERVER_NAME'] . $_SERVER['REQUEST_URI']);
//Define default controller
define("DEFAULT_CONTROLLER", "landing");
//Define default method
define("DEFAULT_METHOD", "index");
//Define controllers directory
define("CONTROLLER_DIR", APP . "controller/");
//Define views directory
define("VIEW_DIR", APP . "view/");
}
public function database() {
//Define DB Server
define("DB_SERVER", "localhost");
//Define DB User
define("DB_USER", "root");
//Define DB Password
define("DB_PASSWORD", "");
//Define DB Name
define("DB_NAME", "test");
}
}
и наконец мой раздел автозагрузки composer.json:
"autoload": {
"psr-4":{
"AppWorld\\": "application",
"AppWorld\\Conffy\\": "application/config",
"AppWorld\\FrostHeart\\": "application/core",
"AppWorld\\Controls\\": "application/controller"
}
}
Итак, как мне реализовать маршрутизатор, который направляет запросы URL и загружает правильные файлы?
Спасибо!