21. 缓存上下文CacheContext

龷龳龱龯 Context 龚龗龖龒龎龍龌龊龉龅龂齾齽齺齷齶齵齽齱齯齮齬齩龯齨齧齥齢齠齝龊龉龎齛齘齧齥齖齯齓龖齒齏齎齌齈龱齝齆齅齘齠齎齃鼿齧齥鼻鼸龊鼴

鼱鼯龗鼫鼪 : 龷鼦鼥鼣鼠鼟 drupal 龚齝鼯鼑鼍鼉鼇龎鼄鼸龊鼴齎齝鼃黿黻黸黴黲龷鼦龚黯黭黪齝鼣齧齥齶齘齠齓齏齏鼴黨黧黥龷鼦龚龎黪齝龗龖龷鼦龚黢龎龳龱龯齝龗龖黪黢龎龳龱龯齎黟

鼣點黛黗黓齶齝龳龱龯龎齓黏黋黇齎鼸黃黃麿齝齵麽黿麼麻鼣齌齈齃齎麹麸齏鼴齌齈麴黸麳黻麰麭麬麫麪龗麦晦麤齎齏鼴齝麢麭麟黴黲龷龳龱龯龚麜齛齯龷齌齈龚黢麘黥齝齵麽龎麗麓齎麴

麑麎麌麉麈麄麀鹿鹽鼥齎鹹鹷鹵麈鹳鹲鹷齝鹮龌鹬齵鹪鹨鹥鹡麪齶齝鹟齷鹮齓鹝齝鼦鹛齓黛鹗鹔黢龎鹒鹏齌齈齝鹎鼫鼪鼇黢龎鹍黨黧鹊鹉鹅鼣齎龳龱龯齝鹁鸽鼦鼻麈鼸鹅麘鸹

鸸齱龳龱龯鸶鸳龎鼯鸯鸭麟齝鼣鸬鸪齢齠鸩鸨齓龖鸥麸鸢鼸鸠齎齎麘黿龎鸩鸨鼣齌齈鸟龳齎齝鸝鹗鸝鸙鸖龎鼯鸯

drupal 齶龳龱龯黢龎黯齛鸒鸑鹥麉鸐齝鸎鸊鹅齖齎黗鸇齌齈齝龗龖齌齈鸃鸒鸑鸀鸎鸊麎鷾鷺鷹鷷鷳齝鸎鸊鷱鷰麟鹍黨黧齌齈鷬龳龱龯鷨鼻黴黲鹊鹉鷥鷢龌麘鸹鷬鼥鷠齘龯鹅鷞鷨麴

鹮龌鷛鷚龳龱龯 CacheContext 龅齝黢龎黯麜麹齯鷛鷚鸎鸊齎齌齈鷬鷛鷚齌齈龎鸎鸊齌齈齎鸪鷒鷨齝鷛鷚鸎鸊齆鷑鸯齌齈鼻麈鼥鷐麘鸹齝鷎鷌鷋鷇黢龎鷛鷚齆鷑龗龖龳龱龯麉鷚鹨鷅鷃鷀鼥鷐齎鶽鷑麴

鼣鷛鷚鸎鸊齶齝麜麹齯鷛鷚鶻鶺黭鶷鷛鷚鼸鶴黇鶰齬齝鷛鷚龳龱龯黭鶷鶽鷑齎鶬鷌齝鷹齓鶪鶽鷑黸鷹齌齈鼸黸鷹鶬鷌齝鸸鶦鼇鷛鷚龳龱龯鶢麟鸠齎黢龎鶡齺鷛鷚 id麴

鷛鷚龳龱龯鶝齏黥鷛鷚 id 齝鶜黢龎 Cid, 齵鶙齓鶻鶕齓鶔鷛鷚齝鶐齵鷃鷀鸀麎鷾齓鶔鷛鷚齝鶌齯鷛鷚鸎鸊齎鶉鶇鸒鶄鶃鸎麿齘齠齎鶢鶁麴

龱齠鵿麽麉鶄齓鶄鷛鷚龳龱龯鷢龌鵽鶐齝鶦鵺鸎鸊龎鼯鵹鷋鷇齎麴

缓存上下文的用法:

鷛鷚龳龱龯齎黟龎齓龖齨鵶鵲鶽鵯齝齨鵶鵲龎齒齏齎齝黭鶷齓黏龳龱龯齝龗龖龳龱龯鶐齓龖龳龱龯麹麸鷋鷇齝鶦鼿鹲齎鵫鵪鵨鵤鷚鼣齝鵡龳龷cache_context.龚齘鵜黢龎齵麹鷠齎鼿鹲鵫鵪id麴

龗龖齨鵶鵲鵚齽鵖鵓鵏龷token龚齩龳龱龯id齩鷛鷚龳龱龯鵈鵇鵶麗麴

鶃鵅龳鷞齵龎鵂齓齌齈鴿鶽齎鶻鶕鵶齝鼣鴼鴻Cid鷬鷛鷚id鷨鸐麌鴹麳麹鷠齎龳龱龯鵫鵪麹麸鴷鹥鷎鷌齎齌齈黟麴

齓龖鴶鼍齎鴵鸪齝鼱鼯鼣鴲麄鹲鴯鷀齎鴮鴫鶽鵯鸸鶦龗麦黯齏鷛鷚黋黇鸢

$build = [  
  '#markup' => t('Hi, %name, welcome back!', ['%name' => $current_user->getUsername()]),  
  '#cache' => [  
    'keys' => [...],  
    'contexts' => ['user'],  
    'tags' => [...],  
    'max-age' => -1  
     ]  
];  

龗齢齎'user'黢龎鷛鷚龳龱龯id齝鸸鶦鼸鳴龖龳龱龯id齝齵麽鵯鷳齓龖龳龱龯鶽鵯齝鸎鸊鳲鳯鳮鳭黥鶦龱龳龱龯id鸢鷬齱鳫鳧齃鼿鳦鳤鷨

Array  
 (  
     [0] => cookies  
     [1] => headers  
     [2] => ip  
     [3] => languages  
     [4] => request_format  
     [5] => route  
     [6] => route.menu_active_trails  
     [7] => route.name  
     [8] => session  
     [9] => session.exists  
     [10] => theme  
     [11] => timezone  
     [12] => url  
     [13] => url.path  
     [14] => url.path.parent  
     [15] => url.query_args  
     [16] => url.query_args.pagers  
     [17] => url.site  
     [18] => user  
     [19] => user.is_super_user  
     [20] => user.node_grants  
     [21] => user.permissions  
     [22] => user.roles  
 )  

龗鳣龳龱龯 id 鳢鼸麹鷠齎龳龱龯麹麸齝鵡龳龷 cache_context. 龚齘鵜黢龎龗鳣麹麸齎鼿鹲鵫鵪 id 齝龱齠鵿麽麉鶄齓龱鷛鷚龳龱龯齎鷎鷌鷋鷇鸢

鴹麳麫鳠鷎鷌鷋鷇麈鳞鳛鳚鳖鳴鳕鳒鶐鳐

齖麫鷛鷚龳龱龯齎黭鳍鵇齯鸢 \core\lib\Drupal\Core\Cache\Context

鳄黏鹹鳁齎鷛鷚龳龱龯鸎鸊鳢齏鼴黥齓龖鷛鷚龳龱龯麹麸麉齖麫齝龗鳣麹麸鷎鳀鷺鷹齒黇齝鲾鵖鲼鲺鼣鷛鷚龳龱龯鲹鲷齶鸢 Drupal\Core\Cache\Context\CacheContextInterface

龗龖鲹鲷鲳鴶鼍齝齏鼴黥鶦龱鲰鲭鳐鸢

public static function getLabel(); 鴷鹥鷛鷚龳龱龯鶻鶺齝龗龖鶻鶺鶐齯鲩鲧鷛鷚龳龱龯齝鲥鲤鲢鹷鹹鶄

public function getContext(); 麌鷛鷚龳龱龯 id 鲞鹎黿鷛鷚龳龱龯黟齝鼱鼯黯齏黥鷛鷚龳龱龯 id 黿龷 ip 龚齝鹮龌龗龖鲭鳐麌鴯鷀鷎鷌齎鲛鲚鲖 ip

public function getCacheableMetadata(); 鴯鷀鸸鷛鷚鲑鶽鷑齝齏鼴龗龖鲭鳐龎黿黥鲏鲍鷛鷚龳龱龯鲋鲈鷬齱龱龯鷨

龗齢鼸齓龖鲅鶁齝鸒龉鲃鸢鵿麽黴黲齓龖鷛鷚龳龱龯 id 黯黭齓黏齌齈鴿鶽齝鷌鷇黥龗黏齌齈鴿鶽齎鲁鶬鱾麉齎鶽鷑鶬鷌鲁鶬齝鹁鶰齌齈鴿鶽龎鱺齽鱺齽鳴齎齝鼱鼯鸒鸑鱷齩 cookie 鼦麽鳢鱵鱴鲳鳴鸪鶔鸠

鳄龖鸪鶔鸠鳢鸸鶦龎齓龖龳龱龯 id 齝鹮龌鵿麽鱰黸龎麟齏鼴鱺齽鳴齎鷛鷚龳龱龯麹麸龂鱬鵿麽鱪鷇龗麦齎龳龱龯鼸齓龖鷺鷹齒鱦鸢龗鳣鱢鱟鱜鳴齎龳龱龯齵麽鳢龎鷹黇鵅齎齓龖鱙鹹齎鸪鹹

鷎鷌鼇黢龎鹅鼸齎鸒鸑鱷鶔鸠鳢龎鸒鸑鱷齝鹅鼸齎 cookie 鶬鱗鳢龎 cookie

黿黥鳠鶝龗龖鲅鶁齝鱔鱓黥鴼鴻鳁鷛鷚龳龱龯鲹鲷 Drupal\Core\Cache\Context\CalculatedCacheContextInterface

CacheContextInterface 麜鼱齝黸鷹鸟齖鱑龎鼦麽齎鲭鳐鳴黥齓龖鴿鶽齝鶐鴿鶽黯齏齓龖鱙鹹齎鷎鷌鱍鹹齝龗麦鱙鱙鱋鱇黥鷛鷚龳龱龯麹麸齎鶽鱗

鼃黿鷋鷇龗龖鲹鲷齎鷛鷚龳龱龯麹麸鼸鱃鳴鱍鹹齝鹅鶦鱀齏龗麦齎鷛鷚龳龱龯鶦鰽鶽鵨鵤鰻鰹龳龱龯 id

鵽鶐龗麦齎鷛鷚龳龱龯鸐鸸鶦鰸鰷鴿鶽齝龳龱龯 id 鸀鴿鶽鰳鶐鰲鰰鰭鰩齝龗鳣鴿鶽黭鶷龗齓鹹龳龱龯齎鵂齓鷎鷌鷛鷚龳龱龯齝黸黯齏鴿鶽黭鶷鰥鰢鸪鹹齝麜齛齯黯齏黥鰥鰢鴿鶽

笔者注:在写这篇帖子时(版本8.2.3),缓存上下文idsession 类:Drupal\Core\Cache\Context\SessionCacheContext没有实现接口,已向官网报告bug

如何自定义一个缓存上下文呢?

齏鼴齓龖鵫鵪齝齵鷋鷇黥鶦龳鰡黏鲹鲷鸟齓齝鵫鵪 id 黿鸢 cache_context.context_id, 龗齢龷 cache_context. 龚龎鸎鸊麟鸑齎鰟麄齘鵜齝龷 context_id 龚黢龎麟鵽鶐齎龳龱龯 id

齏鼴鰜鵫鵪鸽鲢鹿龷 cache.context 龚鶻鶺齝龱齠龎齓龖麿鸪鸢

  cache_context.ip:
    class: Drupal\Core\Cache\Context\IpCacheContext
    arguments: ['@request_stack']
    tags:
      - { name: cache.context }

鹁鸽鸭鰎鰌鰉鼿鹲鰇鸸鷬黨鰆鷛鷚鷨齝鰌鰉鹲鸢 \core\lib\Drupal\Core\Cache\Context\CacheContextsPass 麌鼣鼿鹲鰌鰉鯿鯾鯽鷒齖麫龗鳣鷛鷚龳龱龯齝鯺麌齵麽鯸鷚鹥鼿鹲鴿鶽 cache_contexts

鸎鸊鳮鳭黥齓龖鵓鵏鷛鷚龳龱龯鯶麫鹲齎麹麸鶦鲭鯴鵽鶐齝鵫鵪 id 黿龷 cache_contexts_manager 龚齝鹹鸢 Drupal\Core\Cache\Context\CacheContextsManager

齵齎鶢麟鸇鶐龎鲹鯳鷛鷚龳龱龯齏鼴鴿鶽鹁鸽鹬齵鲞鲈黿鷛鷚 id convertTokensToKeys(array $context_tokens)

龗龖鲭鳐鴯鷀鷛鷚 id 齎鸐鯨齝鯺黸龎齓龖齨鵶鵲齝鶰龎 Drupal\Core\Cache\Context\ContextCacheKeys 麹麸齝黿龍龌麟龗麦齖麫龂鼃黿鷛鷚龳龱龯鲋鲈齝齱龱麴

鷛鷚龳龱龯鯶麫鹲鷹鸐鶜鳮鳭黥齓鳣鲾鼦鳫鳧鲭鳐齝鼱鯧鴶鼍齝黸鳴鷞齝鸭鱦龎鷛鷚龳龱龯鲋鲈

缓存上下文优化

黻鸸麈鯣鵚鯠龊鹥黥鼸鳣鷛鷚 id 鱵鱴鼫鱦齝龗鸸麈黭鶷龍龌鯝龂鲾鷋鷛鷚龳龱龯龎鰭鯜鳒齎齝鼫鱦黢龎鯜鳒鰳齎鰭鰩齝鯚鯗鹥鯓黢龎鯚鯑鹥鸪

黿龍龌麟鰭鯜鳒龂龗龎黿黥鯏鹥鷛鷚龳龱龯鲋鲈鸇鶐齝鷢龌鲋鲈龅龂鯋鸽齎鯉麫龎龍龌龂鲋鲈齎鸠齎黸龎鯅鯄鶡齺鱙鱗鶬鷌齝鶰龎鯅鯄鼣鶡齺 Cid 鸐鯀麘麳鳴齎鴼鴻

鷋鮼龳鯜鳒鰳鰭鳒齎鯉鮺黢龎鯑鳖鮶鮴齝鸪鳖鷎麸

鮰龖鴵鸪鸢鼯鼑齓龖龳龱龯鷹鸐黯齏黥 user user.permissions 齝鲾鷋鶐鲚齎鲁鶬鶜黢鮭鱴黥鮬鮫齎鲁鶬齝鯑鯜鳖鵡鮶鮴齝鹅鶦龗齢鮬鮫龳龱龯龎鳴鮨齎齝齵鸸鶦鵖鲋鲈鮥鷬鶜黢龎麬鮥黥鷨

鹁鶰龗麦齎鲋鲈麪鶡齺齓龖鲅鶁齝齛鶐鲚鮬鮫鶬鲈鸐齝麪鷃鷀鸟齘齎鷛鷚齝龗鸸麈龎鼸鲅鶁齎齝鷢龌鮢龂龗黢麭麟麌鮬鮫齎鶬鲈鮟鷠鹥鷛鷚齎鶽鷑齶

鼃鸯鳠鶝鮢鳐龎鲢鷛鷚龳龱龯鵡龳鷛鷚黋黇齝鯺鹬龗鳣鵖鲋鲈鮥齎鷛鷚龳龱龯齎鷛鷚鶽鷑鰲鮝鹥鵖鷛鷚齎鶽鷑齶齝龗鶜黢龎鷛鷚龳龱龯鲹鲷黿龍龌麭麟鼸 getCacheableMetadata 鲭鳐齎鯉鼃麴

鼯龳麿齶 user.permissions 鮛鹁鵖鲋鲈鮥黥齝鱬齵齎鷛鷚鶻鶺鮚黸麪鮘鮥齝齵齎鷛鷚黋黇麪鰸鰷鲢鵖鷛鷚齎鶽鷑齝鸯鸐鮬鮫鶬鲈麌鱔鯏鷛鷚鮔鶴齝龗麦黢鯸鮓黥鶽鷑齎鼥鷐黇

龗黏鮢鳐鮑鱾麉齓龖鮐鮎齎鰜齖齝黢龎鯅鯄鮊鮈鷛鷚鷬鮆黸麳鮅齩鶜黸鮔鶴齝鱬鮆黸麪鶐鹥齎鷛鷚鷨齝鮂鮂龳齠龗龖鴵鸪鼯鼑黸鯀麘鲋鲈齝齛鮬鮫鶬鲈龎麌鶡齺鰎齎 Cid 齝鯉 Cid 鸸麈黢鷳黿鮊鮈鷛鷚黥

鳖齓魾齎魺麸龎鸢鼯鼑齓龖鷛鷚龳龱龯齆魹齯鵂鲏鷾齝鶰鲏鷾鸸麈鲁鶬齝魶魵鷛鷚龳龱龯鷎鷌黟鲁鶬齝鹮龌齛鲋鲈鮥鷥龳龱龯鸐齝魳魲麌齵齎鷛鷚黋黇鲍鯺鷬鶜鵓鵏鰲鮝鷨鹥鵖鷛鷚齎鶽鷑

龗鲾鷋龎齓黏魱鵤齎黯齏龳龱龯齝鶴鼑麜齛齯鷛鷚黥 getContext() 齎魯鼑齝鯅鯄麬魬魩鴼鴻 getContext() 齝黢魦鹥黥鲋鲈齎鸠齎鸢黇麈鳮魤魣麹齵齎鴼鴻鯣鵚鷌鷇鼣鷛鷚鶻鶺龳齠黥

鼯鼑鷥鷛鷚龳龱龯齆魹齎鲏鷾鲁鶬齎魠魝齝黢鸸鶦麎鷾 max-age = 0 麉魗魕龳龱龯鲋鲈

鷀麳鱷麉齝鷠鷥魑魍黿龍龌鷛鷚鯶麫鹲鼣鴼鴻鴯鷀 cid 鸐鴯鷀齎龎 ContextCacheKeys 麹麸黥魌齝齵魋魉鷛鷚鶽鷑鰲鮝齎黗鸇齝龗龖麹麸鱵鱴黥鷛鷚黋黇齝鷛鷚鸎鸊麌鲍鯺齵鹥鵖鷛鷚鶽鷑齎鷛鷚黋黇

龳龱龯鲋鲈齎鯉鮺龎黯齏齎鷛鷚龳龱龯齶齝鼯鼑鷹鸐鷚鼣鷎鳀鷺鷹鯑鳒齎龳龱龯齝麌麢鯸麻鷺鷹鯑鳒龳龱龯齝鰲鰰魇黿鼫鱦齝鷎鷌鲋鲈鲞鶬麿鸪鼯龱鸢

['a', 'a.b'] -> ['a']

['a', 'a.b.c'] -> ['a']

['a.b', 'a.b.c'] -> ['a.b']

['a', 'a.b', 'a.b.c'] -> ['a']

['x', 'x:foo'] -> ['x']

['a', 'a.b.c:bar'] -> ['a']

鲋鲈鷋鷇齎黭鳍齱鸢 Drupal\Core\Cache\Context\CacheContextsManager::optimizeTokens(array $context_tokens)

额外的笔者提醒思考以下问题:

鷛鷚 ID 魃魀鸢

鼸鼄鼸鸸麈鰡鶪鶽鷑鹿鷇鷹齓龖 Cid 龅龂

鲾鷋龎鼸鸸麈齎齝鱬鸎鸊鬽鷃齎鬻鬺鲳鬷鬵鹥龗麦齎鹔鬱齝鷱鷰黸鷹鶐鬮齎鶽鷑鯣鵚鰭鬬鵖鹨鼣黸鷹鷛鷚 Bin 齢齠齝鰇鵽魃魀鶜鼄鼸鶌鸎齝魬魩鶽鷑麪鵽鶐鳴龖鷛鷚龳龱龯齎鵯鲍齝龗鬩鬥黥魃魀鸶鬣

鳄齓龖鷛鷚龳龱龯麹鷠齓龖齒齏齌齈齝鷹齓龖齒齏齌齈鹿鷇鰡鶪鶽鷑齎鸶鬣麜齛鬥

鸯鮎黿黥鯀齓鬢鬟鬝 Cid 魃魀齝鮑鸸鶦鮐鮎黯齏鷛鷚鬙齝鼱鼯鴮鴫鶽鵯黢鬽鶐黥龗麦齎鬻鬺

鷛鷚龳龱龯鸀鶻鶺齎鳦鬬鸢

鼣鶃龯鬖鱷鱙鱗鬔鲧黥龳龱龯齝黢龎黿黥鰟鬐龳龱龯黭鶷齎龎麜麹齯鶽鷑鶰齬鮎鼣齎齌齈齝鶰鶻鶺黭鶷齎龎鶽鷑鹊鬌齝鼸鰡龖鶌鬙龒龷鮎鼣龚齩龷鹊鬌龚齒鬬鸭麟

龳龯齎 user.permissions 龳龱龯齝齵鵖鲋鲈鮥鸽鲾鶻鶺鮛鹁鸀鶽鷑鶻鶺鲍鯺齝鱬齵齎鶻鶺鱾麉齎鶽鷑鮔鶴龎鼣龗黏齌齈龱鶽鷑鮔鶴黥齝鶰鶽鷑鹊鹉齎鶻鶺鱾麉齎鮔鶴龎鹅鼸鹔鬱龱齵鳢鮔鶴黥

鹅鶦龗鰡黏鶻鶺齆鹁鷌鷇黥鮎鼣齌齈鸀鹊鹉鶃鬌鸟鰳齎鳦鬬齝鲍鯺麢龎齓黏鬉鬈鶰鯣麴

缓存上下文官网文档:

https://www.drupal.org/docs/8/api/cache-api/cache-contexts

bug报告:

cookiesheaders上下文对象的getContext($parameter = NULL) 方法,参数为空时,返回的是数组,它应该是返回一个字符串,修复办法:返回数组的哈希值

缓存上下文:session 类:Drupal\Core\Cache\Context\SessionCacheContext 没有实现接口CacheContextInterface

题外话:

齓鬇鬅鬃鳄鬀鹿齓髽髹鸪麉鶉鶇 drupal 齝龗髽髹鸪髷髴龎 2016 髯齎髮鸽齓髽齝鸐鰳麳齎鰜魝齝 drupal8 齓髧黥齝鵿齎鰡龖髥髢齝鱍齎鶜齓髧鳴黥齝鼣 drupal 齶鸀齺齷齢鳢鼸鰜鳴髡髞

黿龍龌麟鬅鬃髚鸇龅龂

齓鲭齠髗齯髕髑麹齶髎鬖髗鹡鳦鼸鹅髌髊麴鷇鯿鯾髎齃鹷麽鳢鲳髇齝齺齷髆髅鼱鯧鱙齝鱇鼸髄髅麬鬖髗鹡鳦鯄髁黗鸇齝黸骾鱪魦髎骻鰇鵽龍龌鶜黸鵏骸鱇骶骳麪鳮鳭鮶鶃齺齷鯸骲

龗魶魵鲳鬷鱪骰鹿齓龖鰜齎鬖髗鹡鳦齝鲳鷇鷋齎鼇髎齃鬷鼸龗麦齎鶔黛齝鱬鬖髗點黛鼸鱺齽鳴齎鰜齖齝鵿麽麭麟骬鳞鲋骩骨鬖髗齎點黛齝骥骢骟麉 drupal 麪鷳黿髎齃骞骚鸎鸊齎鶢齥齝黢骾 linux 齓麦

齓龖鰜齎點黛黸麢龎鬉骗鹮龌鴶鼍齝鳖鸭麟齎龎齺骓齝齺骓齢齠鼸鶽鱗骐鳴骎龊髌髊齎鹷齝黸魕鼸鬖鱪骍鮑鼸鵽鶐骍齝龗鼻龎鶌鬙魣鸝骐验骊鼻麈骉麀黸骈齝 drupal 黢龎龗麦齎鶡骄齝骬鳞鲋骩齝齺骓骬鳞鱙麴

骂鹁髎齃鬷鼸驿驼鬖髗齎驹驶齝 drupal 鼣鰥驴驱鵏齎鹮龌鹿驯齝鹮黢鴿马魌齝驫驩齵驦鱙骻鳢鯳驢齝鱬龎髎齃驡驠齶龯驞驝齝鷳黥鼠鼟骲驜齝马鲾驙驖齎驓鰉黸鼯鯉骉齝髚齓鳣麈驦髎鹷鶄齎驒齎龯齨麴

驑齓鲭齠鵿鼸齓龖骎驐鸢齛驍鵿髎驋鰎驉驇齝骉驄骉鰎齺驀騼騼齝龎齓龖髄騺齎騸騵麴鹷齝齺麉龎麭麟鵏鱦鹗鹔齎齝騲騲齓齺髕髑麈麻龱鱦龍龌齝鵿鼸齓黏鹔騯齝齒鬬騭騩鹮鳣麬騸鸽麈鼣騦騣龳齠麻龱齓麘騢鵤齎騡鼠骻齝

鹷齺齎鸠齎鷠鷥黸龎黿黥鴷鹥齝黢鴻鴷鹥騠鬖鸐鶜魳麌鹨騝齝麻龱鼻鼸龊鼴齝鼻龎鹽鷋齎齝鹮黭鶷鹊鹉鷚鼣麳齝鯺鼣鹊鹉騚麬鸽黭鶷鹊鹉齓鬇齷騖齝鹅鶦鵿験鸑騒鹿齝驦騒鹿齎鼣鹊鹉騠鬖龗龖騸騵鸐鴷鶦麻龱麴

麈鵽鶐 drupal 鬖鱪齎黗黓騐騌齾鳢鼱鯧鳕齝髕髑鼣龗龖麳黓齶魯鶕齓騋鲋骩齎鹷鼻齝齓鯏麬鵏鱦鹗齝驫鸹鹡麪齎鱪骰齝鴷鶦麻龱齓鳣騉騆齝驦齺鰻鼸鹅麓黟齝鸸鶦鴹麳麻龱齎騄鸎鲭鵤驦鵿麽騃鹥齓鯏麴

最后奉上非常喜欢的一段话:

人生中出现的一切,都无法占有,只能经历。我们只是时间的过客,总有一天,我们会和所有的一切永别。

深知这一点的人,就会懂得:无所谓失去,而只是经过而已;亦无所谓得到,那只是体验罢了。

经过的,即使再美好,终究只能是一种记忆;得到的,就该好好珍惜,然后在失去时坦然地告别。

本书共71小节:

评论 (写第一个评论)