У меня проблема. Я использую slim, и у меня есть маршрут для моей главной страницы:
$app->get('/', function() use ($app) { ...
В одном из моих контроллеров я хочу перенаправить на главную страницу, поэтому я пишу
$app->response->redirect('/', 303);
Но вместо перенаправления на маршрут «/» я перенаправляюсь в корень моего локального сервера, который является http://localhost/
Что я делаю не так? Как использовать метод перенаправления?
Slim позволяет вам называть маршруты, а затем перенаправлять их обратно на основе этого имени, используя urlFor()
. В вашем примере измените свой маршрут на:
$app->get('/', function() use ($app) { ... })->name("root");
и тогда ваше перенаправление будет:
$app->response->redirect($app->urlFor('root'), 303);
Дополнительную информацию см. В справочниках Route в документации Slim.
Из документов Slim3 http://www.slimframework.com/docs/start/upgrade.html
$app->get('/', function ($req, $res, $args) { return $res->withStatus(302)->withHeader('Location', 'your-new-uri'); });
Slim 3
return $ response-> withRedirect ($ url).
дать вашему '/' маршруту имя,
$app = new \Slim\Slim(); $app->get('/', function () { echo "root page"; })->name('root'); $app->get('/foo', function () use ($app) { $app->redirect($app->urlFor('root') ); }); $app->run();
Это должно дать вам правильный URL-адрес для перенаправления
http://docs.slimframework.com/routing/names/ http://docs.slimframework.com/routing/helpers/#redirect
//Set Default index or home page $app->get('/', function() use ($app) { $app->response->redirect('login.php'); });
Для Slim v3.x:
Используйте $response->withStatus(302)->withHeader('Location', $url);
вместо $app->redirect();
В Slim v2.x можно использовать вспомогательную функцию $ app-> redirect (); для запуска запроса перенаправления. В Slim v3.x можно сделать то же самое с использованием класса Response (см. Следующий пример) [1].
Используйте pathFor()
вместо urlFor()
:
urlFor () был переименован в pathFor () и может быть найден в объекте маршрутизатора. Кроме того, pathFor () – это базовый путь [2].
Пример:
$app->get('/', function ( $request, $response, $args ) use ( $app ) { $url = $this->router->pathFor('loginRoute'); return $response->withStatus(302)->withHeader('Location', $url); });
Примечание: дополнительные параметры могут быть предоставлены путем передачи ассоциативного массива имен параметров и значений в качестве второго аргумента метода pathFor()
: $this->router->pathFor('viewPost', ['id' => 1]);
,
Метод pathFor () маршрутизатора принимает два аргумента:
- Название маршрута
- Ассоциативный массив заполнителей шаблонов маршрутов и значения замещения [3]
Рекомендации:
Я думаю использование ./ вместо / будет работать.
Я думаю, что я столкнулся с аналогичной проблемой, и проблема была в моем файле конфигурации .htaccess . На самом деле это должно быть примерно так:
RewriteEngine On RewriteBase /api #if your web service is inside a subfolder of your app, # you need to pre-append the relative path to that folder, hope this helps you! RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ index.php [QSA,L]