Zırvalama Tahtası symfony, debian, PHP5, SQL ve pek çok ayrıntı

2Feb/090

symfony template cache ve user culture

Eğer bir gün gelirde symfony kullanarak çoklu dil destekli bir uygulama geliştirmeye kalkarsanız cachelediğiniz templatelerin kullanıcı dilini değiştirdiğinde aynı kaldığını göreceksiniz, bunun nedeni cache sistemi içerisinde kullanıcının dili (user->getCulture()) dikkate alınmadan cache edilmesidir.

Bunu önlemek için partial cache sırasında include_partial, include_compotents, include_slot, include_compontent_slot ve cache fonksiyonu bildirimlerinde ikinci parametre olarak verilen arrayin içerisinde sf_cache_key ile kullanıcıya ait dil seçeneğini belirtebilirsiniz.

Ancak bu yöntem bir süre sonra sizi oldukça sıkacaktır, bir sayfada 5 adet include_XXXX methoduna yazacağınız array(’sf_cache_key’ => $sf_user->getCulture()) satırı fazla yormayabilir, ancak bunu pek çok template içerisinde yapmak istediğinizde canınız sıkılabilinir. Ancak kısa bir yol ile bunu çok kolay bir şekilde önleyebilirsiniz.

symfony template cache sistemi için varsayılan olarak sfViewCacheManager sınıfını kullanır, bu sınıfın oluşturulması sırasında iki adet parametre alır, birincisi sfContext nesnesi, diğeri ise view cache için kullanılacak olan cache motoru’nun instance’sı. İlk olarak yapmamız gereken sfViewCacheManager sınıfını extend eden yeni bir cache manager yazmak daha sonra ise symfony’e cache manager olarak bu sınıfı kullanması gerektiğini söylemek.

<?php
// lib/view/myViewCacheManager.class.php
 
class myViewCacheManager extends sfViewCacheManager
{
   public function __construct($context, sfCache $cache)
  {
     $cache->setOption('prefix', $context->getUser()->getCulture());
     parent::initialize($context, $cache);
  }
}

ve apps/AppName/config/factories.yml içerisinde,

view_cache_manager:
   class: myViewCacheManager

Artık cache manager, cache edilecek sayfalarda cache için key üretip bunu cache motoruna verdiğinde cache moturu bu key’in öncesine kullanıcıya ait dil seçeneğinide ekleyecektir. Böylece kullanıcının diline çevirilmiş template daha önce cache edilmiş ise cache motorundan istenecek aksi halde template işlenip cache motoruna saklaması için iletildikten sonra kullanıcıya görüntülenmek üzere gönderecektir.

Comments (0) Trackbacks (0)

No comments yet.


Leave a comment


No trackbacks yet.