我如何使用slim框架路由获取所有..但不包括除字符串

时间:2014-06-05 03:57:32

标签: php regex slim

如何使用slim framework route get all ..但不包括字符串get /login

$app->get('/.*?', function () use ($uri, $app) {
    $app->redirect($uri['public'].'/login');
});
$app->get('/login', function () use ($uri, $app) {
    echo 'login view';
});

...
$app->post('/login', function () use ($uri, $app) {
    $user_controller = new controller\user_controller();
    $user_controller_login = $user_controller->login($uri, $app);
});

1 个答案:

答案 0 :(得分:5)

修剪路线按顺序处理,因此如果您在全部捕捉之前定义/login路线,它将按此顺序工作:

$app->get('/login', function() use($app) { ... });
$app->post('/login', ...);

$app->get('/.*', function() use($app) {  $app->redirect('/login'); });

虽然,我通常不会看到所有的'风格路线。通常,您使用URL重写传递给路由不提供的静态文件,如果您这样做是为了确保用户已登录到每个页面,那么最好使用Slim Middleware来处理这一点。

例如,如果您有一个经过身份验证的中间件,它可以在您的每个路由上检查登录会话/ cookie /等等,如果没有找到,则重定向到登录页面(也传递当前URL以便它们可以登录后重定向回来。)

$authenticate = function() {
    $app = \Slim\Slim::getInstance();

    return function() use($app) {
        // check for auth here somehow
        if (!isset($_SESSION['user'])) {
            $app->redirect('/login');
        }
    };
 }

 // Use middleware on your defined routes
 $app->get('/stuff', $authenticate, function() use($app) { ... });
 ...