$container
->inflector('LoggerAwareInterface')
->invokeMethod('setLogger', ['Acme\Logger']) // Acme\Logger will be resolved via the container
;
use FastRoute\Dispatcher;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;
//$container - использование любого контейнера
**
* Routes
*/
$dispatcher = FastRoute\simpleDispatcher(function (FastRoute\RouteCollector $r) {
$routes = require __DIR__ . '/routes.php';
foreach ($routes as $route) {
$r->addRoute($route[0], $route[1], $route[2]);
}
});
/**
* Dispatch
*/
$request = Request::createFromGlobals();
$route_info = $dispatcher->dispatch($request->getMethod(), $request->getPathInfo());
switch ($route_info[0]) {
case Dispatcher::NOT_FOUND:
Response::create("404 Not Found", Response::HTTP_NOT_FOUND)->send();
break;
case Dispatcher::METHOD_NOT_ALLOWED:
Response::create("405 Method Not Allowed", Response::HTTP_METHOD_NOT_ALLOWED)->send();
break;
case Dispatcher::FOUND:
$class_name = $route_info[1][0];
$method = $route_info[1][1];
$vars = $route_info[2];
$object = $container->get($class_name);
$response = $object->$method($vars);
if ($response instanceof Response) {
$response->prepare(Request::createFromGlobals());
$response->send();
}
break;
}
- по поводу request я решил не запариваться и работать с глобальными переменными. Если потребуется, я могу установить через компоузер request от symfony (или любой другой).
- обработчики ошибок мне не нужны, т.к. во время программирования я сразу буду видеть, где происходит ошибка и из-за чего. Пока что структура очень проста и не требует обработки. Если появятся узкие места, конечно я добавлю ексепшены
- шаблонизатор я принципиально не использую, php и так нормальный шаблонизатор.
- работа с консолью можно построить через GET. или таким же макаром создать контроллер который будет отвечать чисто на консольные команды. Это изи.
- для модульности стоит компоузер, можно поставить всё что угодно. Можно в проекте сделать папку со своими компонентами.
- минус о работе с правами доступа вообще не понял. один раз настроил сервер, и больше не паришься.