Drupal 8.0.0-beta12'den bu yana, bu değişiklik kaydında belirtildiği gibi "tüm işleme bir işleme bağlamında gerçekleşmelidir" .
Bu, kabarcıklı meta verilerin kaybolmasını önlemek içindir. Çok uzak çok iyi.
Bir Commerce ödeme bildirimi uyguladığımı varsayalım. Önemli kısım, bir sunucunun bir şeyi bildirmek için bir Drupal URL'sini çağırmasıdır. Kontrolör, bildiğim kadarıyla herhangi bir işleme bağlamına ihtiyaç duymuyor çünkü cevap basit (neredeyse sadece bir durum yanıtı). İyi.
Diyelim ki bu olay hakkında bir e-posta göndermek istiyorum. Bu geri aramada gerçekleşen ödeme olayına abone olan bir EventSubscriber oluşturuyorum. Etkinliğe bağlanıyorum, e-posta verilerini topluyorum ve gönderme işlevini çağırıyorum. Gönderme sırasında, Drupal içeriği oluşturur (bir HTML e-postasıdır!) Ve hata aldım: işleme içeriği olmadığı için Drupal bir istisna atıyor. Hatanın tetiklendiği nokta, Token :: replace () çağrıldığında:
$body = $this->token->replace($this->getBody(), $this->getTokenData());
Bunu nasıl düzeltebilirim?
Seçenek 1:
BubbleableMetadata $bubbleable_metadataToken :: replace () öğesinin dördüncü parametresini kullanın . Bu parametre belgeleri şunları belirtir:
Static :: generate () ve onun çağırdığı kancalar ve işlevler gerekli balonlanabilir meta verilerini ekleyecektir.
Belirteç değiştirmeleriyle ilişkili meta verilerin, simge değiştirilen metni içeren aynı oluşturma dizisine eklenmesini sağlamak için, bu yöntemin arayanların bir BubbleableMetadata nesnesini geçirmeleri ve bunu ilgili oluşturma dizisine uygulamaları önerilir.
Ama
$bodysadece düz bir dize olduğu için , sanırım kabarcıklı meta veriler kayboldu, bu yüzden umursamanın anlamı ne?
Seçenek 2: Değişiklik kaydı önerisini uygulayın ve RenderContext :: executeInRenderContext () kullanın. Bu durumda tüm süreci tamamlardım:
$renderer = \Drupal::service('renderer'); $context = new RenderContext(); $that = $this; $response = $renderer->executeInRenderContext($context, function() use ($that, $recipient) { $that->mailer->send($recipient); });
Yine, önbelleğe alınabilir meta verileri atıyorum.
Önbelleğe alınabilir verilerin atılmasının sorun olmayacağını tahmin ediyorum çünkü e-posta tamamen önbelleğe alınamaz, tüm gövde ve parçaları (çünkü jetonlarla değiştirilen dizelerin her e-postada değişebilecek URL'leri vardır).
Her iki yaklaşım da uygun mu? Biri diğerinden daha mı iyi? Bu soruna daha uygun üçüncü bir yaklaşım var mı? Sanırım sorun, işleme bağlamı ve işleme dizisi olmadığında Bubbleable Metadata ile nasıl başa çıkılacağı şeklinde özetlenebilir.
Evet, e-posta verilerini işlerken, meta verileri ana yanıtın oluşturma bağlamında oluşturmamaya dikkat etmelisiniz.
Üçüncü bir seçenek ve çoğu durumda en iyi seçenek vardır: Yalnızca kabarcıklı meta verileri atmakla kalmayan, aynı zamanda e-postanızın artık yer tutucular içermemesini sağlayan Renderer :: renderPlain yöntemi :
Varlığa ihtiyaç duyulmayan durumlarda son HTML'yi işler.
Calls :: render (), yer tutucular değiştirilecek şekilde.
Örneğin, bir oluşturma dizisinin bir dizeye dönüştürülmesini gerektiren, ancak balonlanabilir meta verilerden (ekli varlıklar ve önbellek etiketleri) herhangi birine ihtiyaç duymayan belirteçlerin veya e-postaların değerlerini işlerken kullanışlıdır.
Bunlardan bazıları nispeten yaygın bir kullanım durumudur ve bir :: renderRoot () çağrısı içinde gerçekleşir , ancak bu genellikle oldukça sorunludur (ve bu nedenle bir :: renderRoot () çağrısı başka bir :: renderRoot () çağrısı içinde gerçekleştiğinde bir istisna atılır. ). Ancak, bu durumda, köpürmeyi değil, yalnızca çıktıyı önemsiyoruz. Dolayısıyla bu, parent :: renderRoot () çağrısını etkilememek için ayrı bir işleme bağlamı kullanır.
(Başka bir işleme bağlamında çalıştırılabilir: ayrı olarak çalışır.)
Ve HTML üretmek için bir oluşturma dizisi oluşturmak her zaman iyi bir fikirdir. Örneğin, biçimlendirilmiş bir metin alanınız varsa, işlenmiş bir metin oluşturma öğesi oluşturun: Özel bir değişkende düğüm gövdesi nasıl güvenli bir şekilde oluşturulur?
Jana Duggar, aşkı arayışı konusunda açıktı. İşte konu hakkında söylediği her şey ve beş yıllık evlilik penceresi.
Outlander'ın yıldızı Sam Heughan kısa süre önce kendisini yıldız yapan rol olan Jamie Fraser'ı hatırlamak için setten ne alacağını açıkladı.
'She Loves You' bir saatte yazıldı, bir günde kaydedildi ve kariyerlerinin en iyi performanslarından birine sahip The Beatles şarkısı oldu.
Dolly Parton ve büyükannesi Bessie'nin özel bir ilişkisi vardı. Büyükanne Parton çok hastaydı ama bu Dolly'nin ona şaka yapmasını engellemedi.
Major League Baseball'da ev koşuları artıyor ve bilim adamları, büyük isabetlerdeki artıştan iklim değişikliğinin sorumlu olduğunu söylüyor.
Su şişenizin üzerinde bir son kullanma tarihi görmüş olabilirsiniz, ama neden? Su gibi doğal bir madde gerçekten bozulabilir mi?
Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?
The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!
El mausoleo del emperador, el hombre que gobernó del 221 al 210 a. C., se encuentra en el distrito de Lintong, Xi'an, Shaanxi
Louis Blues yedek kalecisi Thomas Greiss, 14 NHL sezonunun ardından Perşembe günü emekli oldu
Arizona Coyotes, Çarşamba günü serbest savunma oyuncusu Travis Dermott ile bir yıllık, iki yönlü bir sözleşme imzaladı.
Florida Panthers kalecisi Spencer Knight, Şubat ayında NHL/NHL Oyuncular Derneği oyuncu yardım programına girdiğinden beri bu hafta takımla geliştirme kampında antrenman yaptı.
Rus artistik patinajcı Kamila Valieva'nın karıştığı doping davası çözülmeye çalışılırken, takım Pekin'de düzenlenen 2022 Kış Olimpiyatları'nda kazandığı madalyaları bekliyor.
Binlerce Amazon müşterisi Mulberry Silk Yastık Kılıfı'nı tavsiye ediyor ve şu anda indirimde. İpek yastık kılıfı çeşitli renklerde gelir ve saçın yumuşak ve cildin temiz kalmasına yardımcı olur. İpek yastık kılıflarını Amazon'da yüzde 46'ya varan indirimle satın alın
Perşembe günü Joe Mixon aleyhine kabahat ve ağırlaştırılmış tehdit şikayeti yapıldı.
Lafayette Polis Departmanı, "kadınlara yaklaşan şüpheli bir erkek" ile ilgili birkaç şikayet aldıktan sonra Aralık ayında bir Purdue Üniversitesi profesörünü soruşturmaya başladı.
Çoğu zaman olduğu gibi birdenbire gözüme çarpıyor Her şey yeniden yarı yolda <Hayır, Pasifik'te kesip attığınız değil, karnavalda olan> Her manşet yüksek sesle… ..
2022'de GPT-3'ün piyasaya sürülmesiyle yazma becerisinin önemi azalmış gibi görünüyor. AI ile, zayıf yazıya sahip kişiler de kaliteli personel oluşturabilir.
Günümüzün hızlı tempolu ve rekabetçi dünyasında, kişinin kariyeri kişisel gelişim, finansal istikrar ve genel yaşam memnuniyetinde önemli bir rol oynamaktadır. Bununla birlikte, birçok kişi profesyonel yaşamlarında giderek tükenmekte olan amansız bir durgunluk ve tatminsizlik döngüsüne kapılmış durumda.
Geçen hafta PressGazette (İngiliz medya haber sitesi) aracılığıyla gönderilen bir basın bildirisi fark ettim. Makale, Scandi podcast barındırma ve reklamcılık şirketi Acast'ın podcasting alanında "muhtemelen en etkili" yayıncılardan oluşan bir konsorsiyuma liderlik edeceğini duyurdu.