如何使用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);
});
答案 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) { ... });
...