Как загрузить контроллер / создать роутер для 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.

Теперь мои вопросы:

  1. Стоит ли вообще использовать роутер?
  2. Если да, то какой шаблон я должен использовать для достижения этого.

Итак, в моем 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 и загружает правильные файлы?

Спасибо!

0 ответов

Другие вопросы по тегам