Silex - 如果未找到网址,则重定向到主页

Dev*_*vWL 1 routing silex

我是Silex的新手.如果在Silex应用程序中找不到给定的路由,我想将用户重定向到主页.我已经做了脏的方式放置在我的前端控制器(index.php)的bootom那些代码行:

...
/*
* 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();
Run Code Online (Sandbox Code Playgroud)

有没有更好的方法来获得在基本路径之后的URL中没有所有这些转换的临终路线?

Blu*_*ueM 6

完成此操作的最简单方法是简单地从错误路由返回重定向:

$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.)
});
Run Code Online (Sandbox Code Playgroud)

  • 也许您应该检查错误代码是否为404,以确保重定向仅在找不到的路由上完成. (2认同)