web-dev-qa-db-fra.com

comment utiliser la redirection slim

J'ai un problème. J'utilise slim et j'ai route pour ma page principale:

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

Dans un de mes contrôleurs, je veux rediriger vers la page principale, alors j'écris

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

Mais au lieu de rediriger vers la route '/', je suis redirigé vers la racine de mon serveur local qui est http://localhost/ 

Qu'est-ce que je fais mal? Comment devrais-je utiliser la méthode de redirection?

14
dKab

Slim vous permet de nommer des itinéraires, puis de les rediriger en fonction de ce nom, à l’aide de urlFor(). Dans votre exemple, changez votre itinéraire pour:

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

et alors votre redirection devient:

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

Voir Route Helpers dans la documentation Slim pour plus d'informations.

18
Adrian Wragg

De 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');
});
13
Gene Bo

Slim 3

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

Référence: https://www.slimframework.com/docs/v3/objects/response.html#returning-a-redirect

10
Arthur Araújo

donnez un nom à votre route / 

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

Cela devrait vous donner la bonne URL à rediriger

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

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

Pour Slim v3.x:

Utilisez $response->withStatus(302)->withHeader('Location', $url); au lieu de $app->redirect();

Dans Slim v2.x, on utiliserait la fonction d'assistance $ app-> redirect (); déclencher une demande de redirection. Dans Slim v3.x, vous pouvez faire de même en utilisant la classe Response comme suit (voir l'exemple suivant) [1].

Utilisez pathFor() au lieu de urlFor():

urlFor () a été renommé pathFor () et peut être trouvé dans l'objet routeur . PathFor () est également conscient du chemin de base [2].

Exemple:

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

Remarque: des paramètres supplémentaires peuvent être fournis en transmettant un tableau associatif de noms de paramètres et de valeurs en tant que deuxième argument de pathFor(), tel que: $this->router->pathFor('viewPost', ['id' => 1]);.

La méthode pathFor () du routeur accepte deux arguments:

  1. Le nom de la route
  2. Tableau associatif d'espaces réservés de modèle d'itinéraire et de valeurs de remplacement [3]

Références:

  1. Changement de redirection
  2. urlFor () est maintenant pathFor () dans le routeur
  3. Noms de route
2
MNR

Je pense que j'ai rencontré un problème similaire, et le problème était avec mon fichier .htaccess config. Cela devrait être quelque chose comme ça:

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]
0
Coronellx

Je pense que l’utilisation de ./ au lieu de/fonctionnera aussi.

0
HardlyNoticeable