2010-07-17 3 views
0

나는 Symfony에 새롭고 논리적 코드 구성에 문제가 있습니다.Symfony의 다른 캐시 버전

문제는 게스트와 로그인 한 사용자 및 소유자에 대해 캐시 및 다른 버전의 웹 페이지와 연결됩니다.

예를 들면. 나는 'show'액션을 가진 'user'모듈을 가지고 있으며 URL은/user/show/: id이고 URL은 모든 방문자에게 동일합니다. 그러나 페이지의 내용은 방문자에 따라 다르며 'if'조건으로 선택됩니다. 캐시를 지우고 첫 번째 방문자가 게스트 인 경우 다른 사용자 (소유자 및 로그인 한 사용자 포함)는 게스트의 캐시 된 페이지를 볼 수 있습니다.

어떤 종류의 해결책은 각보기 (소유자, 게스트, 로그인 한 사용자)를 부분으로 분리 할 수 ​​있지만 DRY 규칙을 위반하는 것입니다.

어떻게 하시겠습니까?

답변

2

sf_cache_key 매개 변수를 사용할 수 있습니다. See here how. 제 생각 엔 당신은 로그인 한 사용자에 대해 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

이미 설명서를주의 깊게 읽었습니다. 사례 연구 :) 메뉴 등이있는 프로필 페이지 (user/show/1)가 있으며 해당 페이지 (user/show/1)를 열면 캐시됩니다. 그의 페이지에서 손님으로 "친구 추가"또는 "메시지 보내기"와 같은 버튼을 볼 수 있습니다. id = 1 인 사용자가 자신의 홈 페이지를 열면 버튼이있는 캐시 된 페이지가 표시됩니다./ 간단한 해결책은 소유자, 손님, 친구에게 다른 캐시가 될 수 있지만 가능합니까? Ofcourse 언급 한 sf_cache_key를 사용하고 있지만,이 경우에 사용하는 방법을 모르겠습니다. 나는 – Marcin

+0

..는 캐시의 일부를 제거하는 데에만 유용 생각 나는 방법이 경우 sf_cache_key을 사용하는 방법을 보여 내 게시물을 편집했습니다. 원하는 다른 캐시 버전만큼 많은 다른 cache_key를 지정하면됩니다. – greg0ire

+0

나는 편집 한 게시물을 발견하지 못했습니다. 솔루션은 매우 간단했습니다. greg0ire에 대한 많은 감사 :) – Marcin

0

내가 지금이 해결 확신 앱이 이미 최신 버전으로 업그레이드됩니다. 그러나 나는 데이터 유출을 막는 모든 URL에 사용자 특정 매개 변수를 설정하는 필터를 포함시킴으로써 비슷한 문제를 일반적으로 해결했습니다. 이로 인해 현재 GA에있는보고가 파괴됩니다. 응용 프로그램의 응용 프로그램에서

// 필터 클래스/프론트 엔드/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(); 
    } 
} 

// 필터 정의/프론트 엔드/설정/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 } 
관련 문제