Другая версия кеша в Symfony - PullRequest
0 голосов
/ 17 июля 2010

Я новичок в Symfony и у меня проблема с организацией логического кода.

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

Например.У меня есть модуль 'user', который выполняет действие 'show', а URL-адрес / user / show /: id и URL-адрес одинаков для каждого посетителя.Но содержимое страницы зависит от посетителя и выбирается с условиями «если», так что ... Если я очищу кеш и первый посетитель будет гостем, то другие (включая владельца и вошедших в систему пользователей) увидят кешированную страницу гостя.

Некоторым решением может быть разделение каждого представления (владельца, гостя, вошедшего в систему пользователя) на частичное, но это противоречит правилу DRY .

Как это сделать

Ответы [ 2 ]

2 голосов
/ 17 июля 2010

Вы можете использовать параметр sf_cache_key. Смотрите здесь, как . Я думаю, что вы могли бы использовать user_id для вошедшего в систему пользователя, с добавлением произвольной строки для владельца, а для гостей - строка "guest".

Немного псевдокода, который поможет вам в дальнейшем:

$sf_cache_key = '';
if ($visitor->isLogged())
{
    if ($visitor->getId() == $userId )
    {
       $sf_cache_key = 'owner' . $userId;
    }
    else
    {
        $sf_cache_key = 'logged_in' . $userId;
    }
}
else
{
    $sf_cache_key = 'guest' . $userId;
}
0 голосов
/ 19 апреля 2017

Я уверен, что вы уже решили эту проблему, и приложение уже обновлено до последней версии. Но я решил аналогичную проблему в общем, включив фильтр, который устанавливает пользовательский параметр в каждом URL, предотвращая утечку данных. Это разрушает отчетность в GA, что является моей текущей проблемой.

// Фильтр классов в apps / frontend / lib / accessFilter.class.php

<?php
class accessFilter extends sfFilter
{
   public function execute($filterChain)
   {
      $context = $this->getContext();
      $context->getRouting()->setDefaultParameter('sw_user_id', $user_id);      
      $filterChain->execute();
   }
}

// Определение фильтра в apps / frontend / config / filters.yml

# insert your own filters here
accessFilter:
  class: accessFilter

// Использовать внутри маршрутов в apps / frontend / config / routing.yml

dashboard:
  url:   /dashboard/:sw_user_id/home
  param: { module: dashboard, action: index }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...