46 lines
2.1 KiB
PHP
46 lines
2.1 KiB
PHP
<?php
|
|
|
|
include_once 'vendor/autoload.php';
|
|
|
|
use Krzysiej\RyobiCrawler\Controller\CategoryController;
|
|
use Krzysiej\RyobiCrawler\Controller\IndexController;
|
|
use Krzysiej\RyobiCrawler\Controller\ProductController;
|
|
use Krzysiej\RyobiCrawler\Controller\SearchController;
|
|
use Krzysiej\RyobiCrawler\Controller\StarController;
|
|
use Symfony\Component\Routing\Matcher\UrlMatcher;
|
|
use Symfony\Component\Routing\RequestContext;
|
|
use Symfony\Component\Routing\Route;
|
|
use Symfony\Component\Routing\RouteCollection;
|
|
|
|
if (!file_exists('database.sqlite')) {
|
|
exit('Database file <code>database.sqlite</code> missing. Run docker compose <blockquote>docker compose exec php-app php index.php app:migrate</blockquote> to create it.');
|
|
}
|
|
$productRoute = new Route('/product/{product_id}', ['_controller' => ProductController::class], ['product_id' => '\d+']);
|
|
$searchRoute = new Route('/?search={search_term}', ['_controller' => SearchController::class]);
|
|
$categoryRoute = new Route('/category/{category_name}', ['_controller' => CategoryController::class]);
|
|
$starRoute = new Route('/star/{product_id}', ['_controller' => StarController::class]);
|
|
$indexRoute = new Route('/', ['_controller' => IndexController::class]);
|
|
$routes = new RouteCollection();
|
|
|
|
$routes->add('product_show', $productRoute);
|
|
$routes->add('search_show', $searchRoute);
|
|
$routes->add('category_show', $categoryRoute);
|
|
$routes->add('start_show', $starRoute);
|
|
$routes->add('index_show', $indexRoute);
|
|
|
|
$context = new RequestContext();
|
|
$matcher = new UrlMatcher($routes, $context);
|
|
try {
|
|
$parameters = $matcher->match($_SERVER['REQUEST_URI']);
|
|
} catch (Exception $e) {
|
|
die($e->getMessage());
|
|
}
|
|
|
|
match ($parameters['_controller']) {
|
|
SearchController::class => (new $parameters['_controller']())($parameters['search_term']),
|
|
CategoryController::class => (new $parameters['_controller']())($parameters['category_name']),
|
|
ProductController::class, StarController::class => (new $parameters['_controller']())($parameters['product_id']),
|
|
IndexController::class => (new $parameters['_controller']())(),
|
|
default => throw new Exception('Route not found')
|
|
};
|