Zend Framework, ne $ this-> _forward yapıyor

5 Cevap php

_forward Da eylem bağlı görünümü veren ya da sadece eylem yürütülürken ise tam olarak ne yaptığını _forward bana açıklamak için birini istiyorum, ben göremiyorum.

Ayrıca bir görünüm komut dosyası bu-> eylem $ için argüman geçmek mümkün mü?

Daha genel olarak benim sorunum bir onay sayfa kodu nasıl, en kullanıcı girişi bazı şeyler diyelim ve ona onay göstermek istiyorum, isimli bu durumda demek ileriye mi?

5 Cevap

_forward bir iç yönlendirme olduğunu. _redirect Diğer bazı URL'ye gitmek için müşterinin tarayıcı söyler bir başlığı gönderir gibi, _forward başka bir yerde isteğini yönlendirmek için dahili Dispatcher söyler nerede.

Eğer normal sevk emri düşünürsek:

 preDispatch()
 someAction()
 postDispatch()

Bu ilerleme içinde herhangi bir noktada _forward çağrılması, aşağıdaki aşamalar uygulanmalıdır değil neden olur. Eğer preDispatch () in _forward ararsanız, someAction () yani çağırdı ve olmayacaktır. Eğer someAction () in () _forward ve) sonra hiç œkod (someAction işlenecekleri, (eğer çerçeve işlemek için ne œkod seçim icar) görüşlerinizi işlemek için viewRenderer eylem yardımcı kullanarak iseniz.

Istek yeni Kontrolörü / Modülü iletilir olduğunda tüm gönderme işlemi orada tekrar edilecektir.

Sen kullanılarak gönderilir ediliyor ne eylem öğrenebilirsiniz:

 $action = $this->getRequest()->getParam('action');

Yöntem adı 'someKindOfAction' ise, $ action 'bir-tür-of' içerecektir böylece $ eylem eylem url formu olacak. Sen denetleyicileri ve modüller için de yapabilirsiniz.

Ben _forward çok verimsiz olduğuna dikkat için önemli olduğunu düşünüyorum, ve her zaman doğrudan yöntemi çağırın. Bir _forward yaptığınızda, init (), yine öncesi ve sonrası sevk çalıştırın. Eğer init ne bağlı olarak, çalıştırabilirsiniz (ve insert) iki kez aynı veritabanı kaydı.

Bu kullanımı kolay ama savurgan değildir. Eğer kod profil ve her şey iki defa çağrıldığını neden başınızı beceriyor ise, _forward nedenidir. Lütfen bana ve sınıf genelinde kullanım için init birkaç nesneleri () örneğini gibi, her şeyi iki kere başlatmasını kadar rüzgar varsa! Benim kod yük test yaptım ve ben () foo gibi, doğrudan eylem adını çağıran, yerine _forward ('foo') daha iyi performans var;

Ben çoğu insan biliyorum başka konu dışı ucu, mümkün olan her yerde bu PHP çözümleyici gömülü değişkenler için bir dize kontrol etmek zorundadır sinüs, tek tırnak kullanmaktır. Ben bir opcode önbellek kullanıyorsanız, özellikle, bu vereceğim ne kadar gerçek dünya performansını bilmiyorum, ama iyi bir uygulamadır.

Zend ile benim deneyim sınırlıdır ve ben size zaten ama according to the docs (12.7.6 Yardımcı Yöntemler.) Gördüğüm şey gösteren değilim umut:

_forward ($ eylem, $ controller = null, $ modül = null, array $ params = null): Başka bir eylemi gerçekleştirmek. If called in preDispatch(), the currently requested action will be skipped in favor of the new one. Otherwise, after the current action is processed, the action requested in _forward() will be executed.

Bu yüzden bu konularda denir ne zaman bağlamında gibi geliyor. İkinci durumda ilk o then iletilen eylemi yürütmek denilen oldu hangi eylemi yürütecek. O preDispatch işleyici çağrılan olduğunda istisna

Forward is ment to be used when external redirect is not the right options. Use case (bit ankward, but best i can make up): You have a form that can add your pet (either dog or cat). You have different models for each. You include a select in your form to select dog / cat. Then in your action you do:

if($form->isValid($_POST)){  
  switch($form->select->getValue()){
    case "dog":
      $this->_forward('add-dog','pets','default');
      break;
    case "cat":
      $this->_forward('add-cat','pets','default');
      break;    
  }
}

Ve Kediler ve ayrı eylemlerde köpekler için farklı şeyler ele. Bunun avantajı TÜM parametreler birlikte gönderilir olmasıdır. Eğer $ this-> _redirect kullanılan ediyorum zaman Constrast () POST parametreleri kaybolur. Yani örneğin bir yorum ekledikten sonra çift mesajları ve mesaj engellemek için Yorum listesini sayfasına yönlendirme yapmak (bazı durumlarda amaçlanan davranıştır "sayfa tekrar veri göndermek gerekiyor ...".

Ben orada olmak için kullanılan yemin Çerçeve dokümanlar bir kısmı genel bir düzeyde sevk iş akışını açıkladı. Theres this diagram, ama _forward ne anlatmak onun awefully karmaşık.

Bir eylem _forward yılında $request->isDispatched = false set ve _forward belirtilen denetleyici / eylem aramak için kurulması talebini ne zaman. PostDispatch sırasında isDispatched kontrol edilir - onun sahte eğer, her şey tekrar yeni isteği kullanarak çalışır.

El görüşlerini oluşturma konum sizin eylem varsa Yani ..., onlar hala render alırsınız. Eylem Her şey hala onun başka bir eylem AYRICA sonra ne olacak, ne olacak.

[Soru düzenlemeden sonra değiştir]

İleri yanıt verilmemiştir / onaylamak-sonra-yazı - Bunun için bir yönlendirme kullanın. $this->_helper->redirector->gotoUrl() vs