2016-05-10 1 views
1

Я знаю, что это вопрос, который уже имеет ответы, но никто из них не работал для меня. По какой-то причине я не могу использовать:PHP Slim - перенаправление не работает

$app->redirect($app->urlFor('home')); 

ИЛИ

$app->response->redirect($app->urlFor('home')); 

маршрут «дом» определена, но по какой-то причине Слим просто возвращение пустой ответ 200. Есть ли что-то, что я делаю неправильно?

EDIT: Полный код:

$app->get('/gensession', function() use ($app){ 
    // set up session; this works 
    // if I echo anything here, it'll output on the page 
    $app->redirect('/'); // This doesn't work, neither does urlFor(<name>) 
    return; 
}); 

Это просто оставляет меня на пустую страницу в/gensession. Slim возвращает 200 (OK) и ничего больше. Нет ошибок. Нет выхода.

.htaccess

RewriteEngine On 
RewriteCond %{REQUEST_FILENAME} !-f 
RewriteRule ^(.*)$ index.php [QSA,L] 

EDIT 2: Выход ответ $ app-> является:

object(Slim\Http\Response)#113 (5) { ["status":protected]=> int(302) ["headers"]=> object(Slim\Http\Headers)#115 (1) { ["data":protected]=> array(2) { ["Content-Type"]=> string(9) "text/html" ["Location"]=> string(1) "/" } } ["cookies"]=> object(Slim\Http\Cookies)#116 (2) { ["defaults":protected]=> array(6) { ["value"]=> string(0) "" ["domain"]=> NULL ["path"]=> NULL ["expires"]=> NULL ["secure"]=> bool(false) ["httponly"]=> bool(false) } ["data":protected]=> array(0) { } } ["body":protected]=> string(0) "" ["length":protected]=> int(0) } 

Примечание: ["status":protected]=> int(302) и ["Location"]=> string(1) "/"

Таким образом, если объект ответа, очевидно, содержит эти свойства, почему он не возвращает их клиенту?

+0

Это работает, если вы делаете $ app-> перенаправлять ('/ дом'); или $ app-> response-> redirect ('/ home'); ? –

+0

Нет, он не работает. Однако что-то, о чем я не упоминал в этом вопросе, это то, что я смог перенаправить раньше. Должно быть, я сделал что-то, чтобы остановить перенаправление Slim. Что это может быть? –

+0

У вас есть ошибка? Вы используете ($ app)? –

ответ

0

Фактический ответ:

Понятия не имею, что я сделал, кроме изменения прошла сессия сохранить путь, но в настоящее время работает. Я решил просто принять единственный ответ, поскольку это может быть полезно для других позже. Большое спасибо за все ваши предложения. - Crazy Redd

+0

(Спрятан в комментариях к вопросу.) – Tim

-1

Вы должны вернуть перенаправлять так:

$app->get('/gensession', function() use ($app){ 
    return $app->redirect('/'); 
}); 
+1

К сожалению, это тоже не сработает. Я также обнаружил, что '$ app-> response-> setStatus (500);' также не работает. Страница все еще возвращает 200. –

0

Проблема может быть полезной.

Я использовал slim-minify (промежуточное программное обеспечение), который, по-видимому, не было написано правильно (насколько я могу сказать) -

Оригинальный код (сниппет):

public function __invoke(Request $request, Response $response,callable $next) 
    { 
     $next($request,$response); 
     $oldBody = $response->getBody(); 
     $minifiedBodyContent = $this->minifyHTML((string)$oldBody); 
     $newBody = new Body(fopen('php://temp', 'r+')); 
     //write the minified html content to the new \Slim\Http\Body instance 
     $newBody->write($minifiedBodyContent); 
     return $response->withBody($newBody); 
    } 

Обратите внимание на использование $next($request,$response). В Slim ответ $ неизменен (вы не можете изменять переменную), поэтому вам нужно перезаписать переменную с возвращаемым значением из функции $next().

$response = $next($request,$response); 

не

$next($request,$response);