首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony 2 ESI缓存

Symfony 2 ESI缓存
EN

Stack Overflow用户
提问于 2016-04-07 14:27:18
回答 2查看 656关注 0票数 0

我有一个操作在我的所有页面中被调用(仅用于日志记录的人),此操作从我的twitter帐户中检索最近的tweet。

API访问是有限的,因此我希望此操作的结果在缓存中停留10分钟。

代码语言:javascript
复制
public function socialAction(){

   $consumerKey = $this->container->getParameter('consumer_key');
   $consumerSecret = $this->container->getParameter('consumer_secret');
   $accessToken = $this->container->getParameter('access_token');
   $accessTokenSecret = $this->container->getParameter('access_token_secret');

   // on appel l'API
   $tweet = new TwitterOAuth($consumerKey, $consumerSecret, $accessToken, $accessTokenSecret);
   $screen_name = "blabla";
   $tweets = $tweet->get('statuses/user_timeline', [
       'screen_name' => $screen_name,
       'exclude_replies' => true,
       'count' => 50
   ]);
   $tweets = array_splice($tweets, 0, 5);

   $response = $this->render('GestionJeuBundle:Default:social.html.twig', array("tweets" => $tweets));

   $response->setPublic();
   $response->setSharedMaxAge(600);

   return $response;

}

为了启用缓存,我对​​做了以下更改

代码语言:javascript
复制
app/config/config.yml

framework:
    esi: { enabled: true }
    fragments: { path: /_proxy }

代码语言:javascript
复制
app/AppCache.php


<?php

require_once __DIR__.'/AppKernel.php';

use Symfony\Bundle\FrameworkBundle\HttpCache\HttpCache;

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

代码语言:javascript
复制
web/app_dev.php

<?php

use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\Debug\Debug;

// If you don't want to setup permissions the proper way, just uncomment the following PHP line
// read http://symfony.com/doc/current/book/installation.html#configuration-and-setup for more information
//umask(0000);

// This check prevents access to debug front controllers that are deployed by accident to production servers.
// Feel free to remove this, extend it, or make something more sophisticated.
if (isset($_SERVER['HTTP_CLIENT_IP'])
    || isset($_SERVER['HTTP_X_FORWARDED_FOR'])
    || !in_array(@$_SERVER['REMOTE_ADDR'], array('127.0.0.1', '.....', 'fe80::1', '::1'))
) {
    header('HTTP/1.0 403 Forbidden');
    exit('You are not allowed to access this file. Check '.basename(__FILE__).' for more information.');
}

$loader = require_once __DIR__.'/../app/bootstrap.php.cache';
Debug::enable();

require_once __DIR__.'/../app/AppKernel.php';
require_once __DIR__.'/../app/AppCache.php';

$kernel = new AppKernel('dev', true);
$kernel->loadClassCache();
$kernel = new AppCache($kernel);

// When using the HttpCache, you need to call the method in your front controller instead of relying on the configuration parameter
Request::enableHttpMethodParameterOverride();
$request = Request::createFromGlobals();
$response = $kernel->handle($request);
$response->send();

$kernel->terminate($request, $response);
error_log($kernel->getLog());

尽管每次刷新页面都会更新该页面(经过测试,它在生产环境中做的事情与app.php上的更改完全相同)

我是否误解或忘记了一件事?

提前谢谢你的帮助。

编辑解决方案:我是用

代码语言:javascript
复制
{{render(controller("GestionJeuBundle:Default:social")) }}

把它改为

代码语言:javascript
复制
{{render_esi(controller("GestionJeuBundle:Default:social")) }}

解决我的问题

河求恩

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-08 10:23:17

我是用

代码语言:javascript
复制
{{render(controller("GestionJeuBundle:Default:social")) }}

把它改为

代码语言:javascript
复制
{{render_esi(controller("GestionJeuBundle:Default:social")) }}

解决我的问题

票数 2
EN

Stack Overflow用户

发布于 2016-04-07 14:31:34

就我上个星期的实验而言,值得注意的是,如果您在Symfony中使用调试环境,Varnish总是通过您的请求传递到后端。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36479230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档