Если вы не использовали это до ссылки: 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');
}
Ваш 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';
}
});
Других решений пока нет …