Silex - 如果找不到 url,则重定向到主页
Silex - Redirecting to home page if url not found
我是 Silex 的新手。
如果在 Silex 应用程序中找不到给定的路由,我想将用户重定向到主页。
我已经以肮脏的方式将这些代码行放置在我的前端控制器 (index.php) 的底部:
...
/*
* if no route found in controlers above - get curen route
*/
// input "XL-FOLDER-LEARNINGOWY/SILEX/test1/web/index.php" output ['XL-FOLDER-LEARNINGOWY','SILEX','test1','web','index.php']
$file_with_path = explode('/', $_SERVER['PHP_SELF']);
//input ['XL-FOLDER-LEARNINGOWY','SILEX','test1','web,'index.php'] output ['XL-FOLDER-LEARNINGOWY','SILEX','test1','web']
array_pop($file_with_path);
// input ['XL-FOLDER-LEARNINGOWY','SILEX','test1','web'] output "XL-FOLDER-LEARNINGOWY/SILEX/test1/web"
$path = implode('/', $file_with_path);
//input "XL-FOLDER-LEARNINGOWY/SILEX/test1/web/asdasd/asdasdasd/asdasd" output "asdasd/asdasdasd/asdasd"
$route = str_replace($path, '', $_SERVER['REQUEST_URI']);
/*
* redirect to default view - if non route found
*/
$app->get($route, function () use($app) {
return $app['twig']->render('index.twig');
})
->bind('home');
// RUN SILEX APP
$app->run();
是否有更好的方法来获取位于 url 中的当前路由而不需要所有这些转换?
完成此操作的最简单方法是 return 从错误路由重定向:
$app->error(function (\Exception $e, $code) use ($app) {
if (404 === $code) {
return $app->redirect($app['url_generator']->generate('home'));
}
// Do something else (handle error 500 etc.)
});
我对您的回答做了一些调整,使其满足我的需要。现在脚本可以根据用户尝试访问的 root/main 路径重定向到不同的路径。
$app->error(function(\Exception $e, $code) use ($app) {
if (404 === $code) {
$path = $app['request']->getPathInfo();
$path = explode('/',$path);
echo $path[1];
if($path[1] == 'php'){
return $app->redirect($app['url_generator']->generate('php'));
}
if($path[1] == 'css'){
return $app->redirect($app['url_generator']->generate('css'));
}
//...
return $app->redirect($app['url_generator']->generate('home'));
}
// Do something else (handle error 500 etc.)
});
// RUN
$app->run();
例如,如果他们尝试访问:
www.website.pl/php/hjasdaskldjalsd [404]
这将被重定向到
www.website.pl/php [200]
和
www.website.pl/css/ghjghdfgdfg [404]
这将被重定向到
www.website.pl/css [200]
如果他输入类似
的内容
www.website.pl/hjkhsd [404]
他将被重定向到主页
www.website.pl [200]
我是 Silex 的新手。 如果在 Silex 应用程序中找不到给定的路由,我想将用户重定向到主页。 我已经以肮脏的方式将这些代码行放置在我的前端控制器 (index.php) 的底部:
...
/*
* if no route found in controlers above - get curen route
*/
// input "XL-FOLDER-LEARNINGOWY/SILEX/test1/web/index.php" output ['XL-FOLDER-LEARNINGOWY','SILEX','test1','web','index.php']
$file_with_path = explode('/', $_SERVER['PHP_SELF']);
//input ['XL-FOLDER-LEARNINGOWY','SILEX','test1','web,'index.php'] output ['XL-FOLDER-LEARNINGOWY','SILEX','test1','web']
array_pop($file_with_path);
// input ['XL-FOLDER-LEARNINGOWY','SILEX','test1','web'] output "XL-FOLDER-LEARNINGOWY/SILEX/test1/web"
$path = implode('/', $file_with_path);
//input "XL-FOLDER-LEARNINGOWY/SILEX/test1/web/asdasd/asdasdasd/asdasd" output "asdasd/asdasdasd/asdasd"
$route = str_replace($path, '', $_SERVER['REQUEST_URI']);
/*
* redirect to default view - if non route found
*/
$app->get($route, function () use($app) {
return $app['twig']->render('index.twig');
})
->bind('home');
// RUN SILEX APP
$app->run();
是否有更好的方法来获取位于 url 中的当前路由而不需要所有这些转换?
完成此操作的最简单方法是 return 从错误路由重定向:
$app->error(function (\Exception $e, $code) use ($app) {
if (404 === $code) {
return $app->redirect($app['url_generator']->generate('home'));
}
// Do something else (handle error 500 etc.)
});
我对您的回答做了一些调整,使其满足我的需要。现在脚本可以根据用户尝试访问的 root/main 路径重定向到不同的路径。
$app->error(function(\Exception $e, $code) use ($app) {
if (404 === $code) {
$path = $app['request']->getPathInfo();
$path = explode('/',$path);
echo $path[1];
if($path[1] == 'php'){
return $app->redirect($app['url_generator']->generate('php'));
}
if($path[1] == 'css'){
return $app->redirect($app['url_generator']->generate('css'));
}
//...
return $app->redirect($app['url_generator']->generate('home'));
}
// Do something else (handle error 500 etc.)
});
// RUN
$app->run();
例如,如果他们尝试访问:
www.website.pl/php/hjasdaskldjalsd [404]
这将被重定向到
www.website.pl/php [200]
和
www.website.pl/css/ghjghdfgdfg [404]
这将被重定向到
www.website.pl/css [200]
如果他输入类似
的内容www.website.pl/hjkhsd [404]
他将被重定向到主页
www.website.pl [200]