ক্যাশ না করে বিশ্রাম পান


11

এই টিউটোরিয়ালটি ড্রুপাল কনসোলের drupal gprrকমান্ডটি ব্যবহার করে , আমি দ্রুপাল ৮-এ একটি কাস্টম আরএসটি রিসোর্স তৈরি করেছি I'm আমি একটি সাধারণ জেএসওএন অবজেক্ট পুনরুদ্ধার করতে এই সংস্থানটি ব্যবহার করতে সক্ষম হয়েছি যা একটি জিইটি করে বর্তমান ব্যবহারকারীকে হ্যালো বলেছে:

http://localhost/example/hello?_format=json

জেএসওএন ফিরে আসল এবং এর পরে দেখে মনে হচ্ছে:

{ "hello": "tyler" }

হিসাবে আমি অবশ্যই লগ ইন করতে যাচ্ছি এই আশা করা যেতে পারে কিন্তু আমি যখন লগ আউট, ও রিসোর্স আরেকটি পেতে পারি। একই ফলাফল ফিরিয়ে দেওয়া হয় :

{ "hello": "tyler" }

একটি সম্পূর্ণ ড্রুপাল ক্যাশে পরিষ্কার করা এই সমস্যাটিকে সংশোধন করে তবে আমি বিশেষভাবে এই সংস্থানটিতে ক্যাচিং অক্ষম করতে চাই। আমি এটা কিভাবে করবো?

কার্যকারণ হিসাবে, আমি ভেবেছিলাম ক্যোয়ারী স্ট্রিংয়ে একটি টাইম স্ট্যাম্প যুক্ত করা কাজ করবে:

http://localhost/example/hello?_format=json&time=123456789

তবে এটি কোয়েরি স্ট্রিংয়ের সময় স্ট্যাম্পের মান কী তা বিবেচনা করে তা ঠিক একই ফলাফলটি প্রদান করে returns

বংশবৃদ্ধির জন্য, জিইটি সংস্থান তৈরির জন্য কঙ্কালের কোড এখানে রয়েছে:

class ExampleHello extends ResourceBase {

  /**
   * {@inheritdoc}
   */
  public static function create(/* ... */) {
    return new static(/* ... */);
  }

  /**
   * Constructs a Drupal\rest\Plugin\ResourceBase object.
   */
  public function __construct(/* ... */) {
    parent::__construct(/* ... */);
    // ...
  }

  /*
   * Responds to GET requests.
   */
  public function get() {

    $account = \Drupal::currentUser()->getAccount();
    if (!$account->id()) {
      return new ResourceResponse(array(
        'welcome' => 'visitor'
      ));
    }
    return new ResourceResponse(array(
      'hello' => $account->getAccountName()
    ));
  }

}

জিইটি অনুরোধে ক্যাচিং অক্ষম করতে এই প্লাগইনটিতে আমার কি কনফিগারেশন / সেটিংস সেট করতে হবে?

উত্তর:


16

আপনি ক্যাশেযোগ্যতা ডকুমেন্টেশন পড়তে চান । এটি অ্যারে রেন্ডার করে বলে, তবে এটি প্রতিক্রিয়াযুক্ত সামগ্রীর ক্ষেত্রেও প্রযোজ্য।

রিসোর্সরেস্পোনস ক্যাশেবল রিস্পনস ইন্টারফেস প্রয়োগ করে, এতে অ্যাডচেসেবলডেপেন্ডেন্সি পদ্ধতি রয়েছে।

যদি কোনওভাবে সম্ভব হয় তবে আপনি ক্যাশে অক্ষম করা এড়াতে চান (যা আপনি ক্যাশে সর্বাধিক বয়স নির্ধারণের মাধ্যমে করবেন) তবে প্রয়োজনীয় ক্যাশে প্রসঙ্গ এবং ক্যাশে ট্যাগ যুক্ত করুন।

আপনার ক্যাশে, এর অর্থ হ'ল আপনাকে যা করতে হবে তা হ'ল $ প্রতিক্রিয়া-> অ্যাডক্যাসেবলডেপেন্ডেন্সি ($ অ্যাকাউন্ট)।

আপনার গেট অ্যাকাউন্ট () দরকার নেই, কেবল কারেন্ট ইউজার () সরাসরি ব্যবহার করুন এটি প্রক্সি।


3
আপনি যে \Drupalজায়গাগুলিতে পরিষেবাটি ইনজেক্ট করতে পারেন সেগুলিতেও আপনাকে এড়ানো উচিত , যা আপনার মন্তব্য করা কোডের ভিত্তিতে দেখে মনে হচ্ছে আপনি এখানে করতে পারেন।
এমপিডোনাদিও

11

আমারো একই ইস্যু ছিল.

ডকুমেন্টেশন পড়ার পরে এবং এই পৃষ্ঠাটি দেখার পরে, আমি আমার কাস্টম এন্ডপয়েন্টের জন্য ক্যাশে বন্ধ করতে সক্ষম হয়েছি। এখানে আমার শেষ পয়েন্টের জন্য () ফাংশনের অভ্যন্তরে আমার ওয়ার্কিং কোডের একটি উদাহরণ রয়েছে:

$build = array(
  '#cache' => array(
    'max-age' => 0,
  ),
);

return (new ResourceResponse($myResponse))->addCacheableDependency($build);

ভবিষ্যতের রেফারেন্সের জন্য এটি যুক্ত করা, আশা করি যার যার প্রয়োজন এটি সহায়তা করে।

CacheableResponseTrait ডকুমেন্টেশন পৃষ্ঠা


কাজ করে না !!!!
পোদারোক

@ পোদারোক - এটি আমার পক্ষে প্রথমে কার্যকর হয় না, তারপরে আরও একটি জারি করার পরে drush crএটি প্রতিবার কাজ করে।
tyler.frankenstein

1
একটি কবজ মত কাজ।
মোহাম্মদ ওসামা জিব্রিল

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.