<?php
/**
- Created by IntelliJ IDEA.
- User: MAXIME EPOH
- Date: 03/03/2018
- Time: 22:03
*/
namespace Framework {
use Exception;
use GuzzleHttp\Psr7\Response;
use Psr\Container\ContainerInterface;
use Psr\Http\Message\ResponseInterface;
use Psr\Http\Message\ServerRequestInterface;
class App
{
/**
* @var array
*List of modules
*/
private $modules = [];
/**
* Container
* @var ContainerInterface
*/
private $container;
/**
* App constructor.
* @param string[] $modules Liste des modules à charger
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function __construct(array $modules = [])
{
$this->container = $container;
foreach ($modules as $module) {
$this->modules[] = $container->get($module);
}
}
/**
* @param ServerRequestInterface $request
* @return ResponseInterface
* @throws Exception
* @throws \Psr\Container\ContainerExceptionInterface
* @throws \Psr\Container\NotFoundExceptionInterface
*/
public function run(ServerRequestInterface $request): ResponseInterface
{
$uri = $request->getUri()->getPath();
if (!empty($uri) && $uri[-1] === "/") {
return (new Response())
->withStatus(301)
->withHeader('Location', substr($uri, 0, -1));
}
$router = $this->container->get(Router::class);
$route = $router->match($request);
if (is_null($route)) {
return new Response(404, [], '<h1>Erreur 404</h1>');
}
$params = $route->getParams();
$request = array_reduce(array_keys($params), function ($request, $key) use ($params) {
return $request->withAttribute($key, $params[$key]);
}, $request);
$response = call_user_func_array($route->getCallback(), [$request]);
if (is_string($response)) {
return new Response(200, [], $response);
} elseif ($response instanceof ResponseInterface) {
return $response;
} else {
throw new Exception('The response is not a string or an instance of ResponseInterface');
}
}
}
}
<?php
- Created by IntelliJ IDEA.
- User: MAXIME EPOH
- Date: 03/03/2018
- Time: 21:59
*/
/**
use App\blog\BlogModule;
use Framework\App;
use GuzzleHttp\Psr7\ServerRequest;
require "../vendor/autoload.php";
$modules = [
BlogModule::class,
];
$builder = new \DI\ContainerBuilder();
$builder->addDefinitions(dirname(DIR) . '/config/config.php');
$builder->addDefinitions(dirname(DIR) . '/config.php');
foreach ($modules as $module) {
if($module::DEFINITIONS) {
$builder->addDefinitions($module::DEFINITIONS);
}
}
$container = $builder->build();
$app = new App($container, $modules);
$response = $app->run(ServerRequest::fromGlobals());
\Http\Response\send($response);
J'écris le même code que Grafikart, mais là il ne se passe rien. Poooorrrr...même message d'érreure