You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

90 lines
1.6 KiB

  1. # Observers
  2. Observers maybe used for creating and clearing cache purposes
  3. ## Example observer use
  4. Create you own class with observer:
  5. ```php
  6. <?php namespace Dimti\Mirsporta\Classes\Observers;
  7. use Dimti\Mirsporta\Models;
  8. use Wpstudio\Helpers\Classes\Observer\BaseObserver;
  9. class TagObserver extends BaseObserver
  10. {
  11. public static function getClass(): string
  12. {
  13. return Models\Tag::class;
  14. }
  15. }
  16. ```
  17. Use in models:
  18. ```php
  19. <?php namespace Dimti\Mirsporta\Models;
  20. use Dimti\Mirsporta\Classes\Observers;
  21. class Tag extends Model
  22. {
  23. //...
  24. public function afterSave()
  25. {
  26. Observers\TagObserver::clearCache();
  27. }
  28. //...
  29. }
  30. ```
  31. And in your code for caching data based on this model/observer:
  32. ```php
  33. use Dimti\Mirsporta\Classes\Observers;
  34. //...
  35. $cacheTags = Observers\TagObserver::getCacheTag();
  36. $cacheKey = CacheManager::formatCacheKey([__CLASS__, __METHOD__, $siteId]);
  37. \Cache::tags($cacheTags)->rememberForever($cacheKey, fn() =>
  38. Models\Tag::all()
  39. ));
  40. ```
  41. * CacheManager::formatCacheKey - that is simple helper for concatenate array elements to string
  42. ## Clearing cache from admin dashboard widget
  43. ### Template
  44. ```html
  45. <input
  46. type="button"
  47. class='btn btn-primary'
  48. value="Clear tag model cache"
  49. data-request="<?= $this->getEventHandler('onClearTagCache') ?>"
  50. data-request-success="$.oc.flashMsg({text: 'Cache of tag model is clearing', 'class': 'success', 'interval': 5}); return false;"
  51. />
  52. ```
  53. ### Controller widget action
  54. ```php
  55. use Dimti\Mirsporta\Classes\Observers;
  56. //...
  57. public function onClearTagCache()
  58. {
  59. Observers\TagObserver::clearCache();
  60. return ['status' => 1];
  61. }
  62. //...
  63. ```