how to use slim redirect

白昼怎懂夜的黑 提交于 2019-11-27 20:33:14

问题


I have a problem. I am using slim and I have route for my main page:

$app->get('/', function() use ($app) { ... 

In one of my controllers I want to redirect to the main page, so I write

$app->response->redirect('/', 303);

But instead of redirection to the '/' route I'm getting redirected to the root of my local server which is http://localhost/

What am I doing wrong? How should I use redirect method?


回答1:


Slim allows you to name routes, and then redirect back to them based upon this name, using urlFor(). In your example, change your route to:

$app->get('/', function() use ($app) { ... })->name("root");

and then your redirection becomes:

$app->response->redirect($app->urlFor('root'), 303);

See Route Helpers in the Slim documentation for more information.




回答2:


From Slim3 docs http://www.slimframework.com/docs/start/upgrade.html

$app->get('/', function ($req, $res, $args) {
  return $res->withStatus(302)->withHeader('Location', 'your-new-uri');
});



回答3:


Slim 3

$app->get('/', function ($req, $res, $args) {
  $url = 'https://example.org';
  return $res->withRedirect($url);
});

Reference: https://www.slimframework.com/docs/v3/objects/response.html#returning-a-redirect




回答4:


give your '/' route a name,

$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();

This should give you the correct url to redirect

http://docs.slimframework.com/routing/names/ http://docs.slimframework.com/routing/helpers/#redirect




回答5:


For Slim v3.x:

Use $response->withStatus(302)->withHeader('Location', $url); instead of $app->redirect();

In Slim v2.x one would use the helper function $app->redirect(); to trigger a redirect request. In Slim v3.x one can do the same with using the Response class like so (see the following example)[1].

Use pathFor() instead of urlFor():

urlFor() has been renamed pathFor() and can be found in the router object. Also, pathFor() is base path aware[2].

Example:

$app->get('/', function ( $request, $response, $args ) use ( $app ) {
  $url = $this->router->pathFor('loginRoute');
  return $response->withStatus(302)->withHeader('Location', $url);
});

Note: additional parameters can be supplied by passing an associative array of parameter names and values as a second argument of pathFor() like: $this->router->pathFor('viewPost', ['id' => 1]);.

The router’s pathFor() method accepts two arguments:

  1. The route name
  2. Associative array of route pattern placeholders and replacement values[3]

References:

  1. Changed Redirect
  2. urlFor() is now pathFor() in the router
  3. Route names



回答6:


//Set Default index or home page
$app->get('/', function() use ($app) {
      $app->response->redirect('login.php');
});



回答7:


I think using ./ instead of / will work also.




回答8:


I think I faced a similar problem, and the issue was with my .htaccess config file. It should actually be something like this:

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]


来源:https://stackoverflow.com/questions/23404355/how-to-use-slim-redirect

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!