маршрутизация — Altorouter не может понять, как правильно маршрутизировать Stack Overflow

Если вы не использовали это до ссылки: http://altorouter.com/

Я делаю небольшое приложение, но не требую основы, только часть маршрутизации. Поэтому я решил попробовать altorouter, поскольку это казалось довольно простым.

Я хочу наметить определенные маршруты, чтобы сделать определенные вещи. например:

www.example.com/products/

это должно показать мой шаблон products.php и получить данные из базы данных для заполнения полей. Я получил это работает со следующим:

$router->map( 'GET', '/products', function() {
require('partials/connectdb.php'); //Require Database Connection
$pageContent = getProductsContent($conn); //prepare all the page content from database
require __DIR__ . '/products.php'; //require the template to use
});

То же самое для всех остальных стандартных страниц, моя проблема в том, когда маршрут может измениться. Например:

www.example.com/shoes/

www.example.com/shorts/

www.example.com/shirts/

www.example.com/ties/

Когда пользователь идет по этим маршрутам, я хочу получить параметр «обувь», а затем, продолжая использовать шаблон products.php, выполнять логику только для обуви.

Поэтому, глядя на документы, вы можете сделать следующее:

www.example.com/[*] // что значит что угодно.

Однако после добавления этого в мои списки маршрутов, он аннулирует все, что пользователь пытается посетить. Так что, если они посещают:

www.example.com/products // Как и раньше

Это на самом деле делает логику внутри:

www.example.com/[*]

Кто-нибудь знает altorouter и может мне помочь, пожалуйста? Я вставлю свой полный код страницы ниже:

// Site Router
$router->map( 'GET', '/', function() {
require('partials/connectdb.php'); //Require Database Connection
$pageContent = getHomeContent($conn);
require __DIR__ . '/home.php';
});$router->map( 'GET', '/products', function() {
require('partials/connectdb.php'); //Require Database Connection
$pageContent = getProductsContent($conn);
require __DIR__ . '/products.php';
});$router->map( 'GET', '/[*]', function($id) {
require('partials/connectdb.php'); //Require Database Connection$test = 'this was a test';
$pageContent = getProductsContent($conn);
require __DIR__ . '/products.php';
});

// match current request url
$match = $router->match();

// call closure or throw 404 status
if( $match && is_callable( $match['target'] ) ) {
call_user_func_array( $match['target'], $match['params'] );
} else {
// no route was matched
header( $_SERVER["SERVER_PROTOCOL"] . ' 404 Not Found');
}

2

Решение

Ваш URL должен быть

www.example.com/products/

www.example.com/products/shoes

www.example.com/products/shirts

Тогда вы можете сделать это:

$router->map( 'GET', '/products/:type', function($type) {
require('partials/connectdb.php'); //Require Database Connection

if(!isset($type)){
$pageContent = getProductsContent($conn); //prepare all the page content from database
require __DIR__ . '/products.php'; //require the template to use

if($type == 'shoes'){
//do this
echo 'shoes';
}
if($type == 'shirts'){
//do that
echo 'shirts';
}
});
0

Другие решения

Других решений пока нет …