2016-03-11 1 views
0

Я учусь использовать тонкую фреймворк (v3), и я застрял в попытке сделать перенаправление с флэш-сообщением. У меня есть домашний URL-адрес и URI-флэш-памяти, которые должны установить флеш-сообщение и перенаправить на дом.Как использовать флэш-сообщения с переадресацией в slim 3 и twig

Мой самозагрузки код:

use Slim\App; 
use Slim\Container; 
use Slim\Flash; 
$container = new Container(['settings' => ['displayErrorDetails' => true]]); 
$container['view'] = function ($container) { 
    $view = new \Slim\Views\Twig([ 
     INC_ROOT. '/app/views', 
     INC_ROOT. '/app/views/templates', 
     INC_ROOT. '/app/views/templates/partials',], [ 
      'debug' => true 
     ]); 
    $view->addExtension(new \Slim\Views\TwigExtension(
     $container['router'], 
     $container['request']->getUri() 
    )); 

    $view->getEnvironment()->addGlobal('flash', $container['flash']); 

    return $view; 
}; 
$container['flash'] = function() { 
    return new Flash\Messages(); 
}; 
$app = new App($container); 

Мой файл маршрутизации:

$app->get('/', function($request, $response, $args){ 
    return $this->view->render($response, 'home.twig'); 
})->setName('home'); 

$app->get('/flash', function ($req, $res, $args) { 
    // Set flash message for next request 
    $this->flash->addMessage('global', 'This is a message'); 

    // Redirect 
    return $res->withStatus(301)->withHeader("Location", $this->router->pathFor('home')); 
}); 

И я пытаюсь использовать сообщение в веточке, как:

{{ flash.getMessage('global')[0] }} 

редирект происходит, но флэш-сообщение не передается в новое место. Что я делаю неправильно?

ответ

3

Лучше всего было бы использовать промежуточное программное обеспечение для флэш-сообщений, то вы должны быть в состоянии получить доступ к флэш-сообщений в вашем View, это сделать ..

//Add a middleware to your app 
$app->add(function ($request, $response, $next) { 
    $this->view->offsetSet("flash", $this->flash); 
    return $next($request, $response); 
}); 

$app->get('/flash', function ($req, $res, $args) { 
    // Set flash message for next request 
    $this->flash->addMessage('global', 'This is a message'); 
    $this->view->render($res, 'home.twig'); 
}); 

А затем вызвать его из просмотра как это

{{ flash.getMessage('global')[0] }} 
+0

Большое спасибо за этот ответ, это имеет логичный смысл для меня! Тем не менее, флэш-сообщение все еще не отображается. Есть ли ошибка в том, как я пытаюсь передать сообщение в twig? – EmmanuelYakubu

+0

Я внес некоторые изменения, которые должны сработать для вас. – Vincent

+0

Это, похоже, работает после обновления. Любые идеи, почему это может быть? – EmmanuelYakubu

 Смежные вопросы

  • Нет связанных вопросов^_^