2016-06-29 3 views
0

Я работаю Symfony кэш 2,6 HTTP, я отслеживаю все инструкции в Symfony готовить книгу hereX-Symfony-Cache всегда скучаю

Но, почему реакция всегда X-Symfony-Cache: MISS. Я пытаюсь изменить массив стирания AppModification.php на заголовок privates. заголовок ответа - X-Symfony-Cache: GET/page: fresh.

После того, как я изменил массив, у меня возникла новая проблема, в то время как я пытаюсь войти в свою сеть. У меня возникла ошибка или сообщение, страница не работает.

вот мой код, прежде чем стереть массив частного заголовка:

protected function getOptions() 
{ 
    return array(
     'debug'     => true, 
     'default_ttl'   => 60, 
     'private_headers'  => array('Authorization', 'Cookie'), 
     'allow_reload'   => false, 
     'allow_revalidate'  => false, 
     'stale_while_revalidate' => 2, 
     'stale_if_error'   => 60, 
    ); 
} 

Response Headers:

Cache-Control: частный Connection: Keep-Alive Content-Type: Текст/html; charset = UTF-8 Дата: ср, 29 июн 2016 03:37:56 GMT Keep-Alive: timeout = 5, max = 100 Сервер: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.5 +0,30 Transfer-Encoding: фрагментированное X-Powered-By: PHP/5.5.30 X-Symfony-Cache: GET/страница: несвежий, недействительны

Я пытаюсь стереть массив частного заголовка

protected function getOptions() 
{ 
    return array(
     'debug'     => true, 
     'default_ttl'   => 60, 
     'private_headers'  => array(), 
     'allow_reload'   => false, 
     'allow_revalidate'  => false, 
     'stale_while_revalidate' => 2, 
     'stale_if_error'   => 60, 
    ); 
} 

Ответы заголовков:

Возраст: 2 Cache-Control: public, s-maxage = 62 Подключение: Keep-Alive Контент-длина: 366990 Тип контента: текст/html; charset = UTF-8 Дата: ср, 29 июн 2016 03:41:56 GMT Keep-Alive: timeout = 5, max = 100 Сервер: Apache/2.4.17 (Win32) OpenSSL/1.0.2d PHP/5.5 +0,30 X-Content-Digest: en5ea0d5af1ee851007583987e8dfb3a8207874e303363f3d33c412b7f3fe6c12c X-Powered-By: PHP/5.5.30 X-Symfony-Cache: GET/страница: несвежий, недействителен, магазин

кто может помочь мне, чтобы предложить решите эту проблему? Я понятия не имею, и не могу найти ни одной документации по Symfony.

Вот мой контроллер:

public function showDetailsAction($pageSlug,request $request) 
{ 
    $productManager = $this->get('my.core.manager.product'); 
    $product = $productManager->findOneProduct(); 
    $options = $cmsManager->getSlugType($pageSlug); 

    $memcacheKey = 'prodrelated_'.$productNumber; 
    if($this->get('memcache.default')->get($memcacheKey)){ 
     $result = $this->get('memcache.default')->get($memcacheKey); 
    }else{ 
     $cloudSearchManager = $this->get('my.core.manager.cloudsearch'); 
     $result = $cloudSearchManager->findRelatedProductBy($options);    
     $this->get('memcache.default')->set($memcacheKey, $result, 0, 300); 
    } 

    $view = $this 
     ->view() 
     ->setTemplate("MyBundle:Product:detail.html.twig") 
     ->setData(array(
      'product' => $product 
     )); 

    return $this->handleView($view); 
} 
+0

Просьба показать аннотации вашего действия '/ page'. – Ziumin

+0

Ты имеешь в виду мой контроллер? – karl

+0

Да, просто проверьте, добавили ли вы аннотацию '@ Cache' или правильно изменили свой объект' Response' – Ziumin

ответ

2

В Symfony Cache слой действует как посредник кэша HTTP, так же, как обратный прокси-сервер, как лак будет.

Это означает, что для ответа на кеширование он должен быть общедоступным (любой кеш может его хранить), а не private (только кеш браузера может его хранить). Кроме того, необходимо использовать соответствующую стратегию кэширования, такую ​​как max-age в заголовке Cache-Control или заголовок Expires.

+0

Это значит, что мне нужно установить максимальный возраст в каждом контроллере, который у меня есть? Или существует глобальная декларация для публикации? – karl

+0

Посмотрите на https://github.com/FriendsOfSymfony/FOSHttpCacheBundle, чтобы упростить глобальную стратегию кэширования. – Gerry

+0

спасибо, я постараюсь реализовать FOSHttpCacheBundle – karl

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