PHP-DI вводит статические классы - PullRequest
0 голосов
/ 06 июля 2019

Я начал использовать PHP-DI для управления внедрением зависимостей для пользовательской CMS.Он интегрирован с FastRoute, который будет управлять маршрутизацией (я начал писать свою собственную систему маршрутизации, но пока слишком беден для использования в производстве).Мне нужно внедрить экземпляр RedBeanPHP, который будет использовать в основном статические методы.После прочтения документации я не могу достичь объема, есть ли способ выполнить эту задачу?

<?php 

require_once __DIR__.'/vendor/autoload.php';

use \RedBeanPHP\R;

// Thi part of code is taken from the docs of FastRoute on github
$dispatcher = FastRoute\simpleDispatcher(function(FastRoute\RouteCollector $router) {
    $router->addRoute('GET', '/', 'Controller/index');
    /* User uri mapping */
    $router->addGroup('/user' , function(FastRoute\RouteCollector $router){
      $router->addRoute('GET', '/', 'UserController/index');
      $router->addRoute('POST', '/doRegistration', 'UserController/register');
    });
});

// Fetch method and URI from somewhere
$httpMethod = $_SERVER['REQUEST_METHOD'];
$uri = $_SERVER['REQUEST_URI'];

// Strip query string (?foo=bar) and decode URI
if(false !== $pos = strpos($uri, '?')){
    $uri = substr($uri, 0, $pos);
}
$uri = rawurldecode($uri);

$routeInfo = $dispatcher->dispatch($httpMethod, $uri);
switch ($routeInfo[0]) {
    case FastRoute\Dispatcher::NOT_FOUND:
        // ... 404 Not Found
        break;
    case FastRoute\Dispatcher::METHOD_NOT_ALLOWED:
        $allowedMethods = $routeInfo[1];
        // ... 405 Method Not Allowed
        break;
    case FastRoute\Dispatcher::FOUND:
        $handler = $routeInfo[1];
        $vars = $routeInfo[2];
        list($class, $method) = explode("/", $handler, 2);
        // dependency injection
        $container = new DI\Container();
        $redBean = $container->call('RedBeanPHP\R');
        $container->get($redBean);

        call_user_func_array([new $class, $method], $vars);
        break;
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...