Bir değişken ve birden fazla kontrol

5 Cevap php

Ben CakePHP çerçeve kullanarak, bir web uygulaması üzerinde çalışıyorum. Herefor i birden fazla sayfada bir değişkeni (tüm sayfaları farklı denetleyicileri) istemeniz gerekir. Bu değişken, tüm farklı kontrolörler bildirilen olmadığından ben, birkaç sayfada bir hata almak olduğunu oubvious olduğunu.

Bunun için bir çözüm var mı? Ben zaten başka bir denetleyici bir kontrol almak için app :: ithalat denedim, ama bu (hala tanımlanmamış değişken hatası alıyorum) çalışmak gibi görünüyor doens't.

İşbirliğiniz için thnx!

Regards, Simon

5 Cevap

Duplicate question, ama ben burada benim cevap yapıştırın edeceğiz biraz daha iyi ifade edilmiş düşünüyorum:

Deceze yorumuna ve DavidYell cevabı omuzları üzerinde dururken, ben onlar için almak için çalışıyoruz ne iyi bir görünüm kazımak başardınız düşünüyorum. Belki. Ne görüyorsanız o gevşek anlayışı ile ve ne var ...

Varsayılan olarak, PagesController::display() yöntemi sayfası görünümü oluşturur (home.ctp). Ben bu bahsettiğini olduğunu sanıyorum. O dedi, size bir yöntem ayarı konum değişken SectionsController Farklı bir denetleyici farklı bir yöntemle oluşturulan ana sayfanız için mevcut olmayacaktır. Tüm görünümleri için bir değişken istiyorsanız, yapabileceğiniz birkaç şey vardır:

  1. Sen config/core.php dosyasındaki değişkeni ayarlayabilirsiniz (genellikle tavsiye edilmez)
  2. Bir sabittir eğer config/bootstrap.php bunu ayarlayabilirsiniz. O, ben size bir şey dinamik olarak üretilen, kod zor değil gidiyoruz bir değer anlamına gelir. Eğer bir sabiti olarak değişken oluşturmak farketmez.
  3. Bir beforeFilter() veya beforeRender() stilini AppController in ayarlayabilirsiniz. Özel denetleyicileri (Eğer protokolünü takip ettik varsayarak) Tüm AppController devralır. Eğer bu yolu seçerseniz, cake/libs/controller/app_controller.php bir kopyasını yapmak ve app/ dizine yerleştirebilirsiniz.

Bunlar Ben onları anlıyorum olarak sizin ihtiyaçlarınıza en uygun olacağını düşünüyorum yolu vardır.

Sen Configure.write kullanabilirsiniz ... Daha fazla bilgi here

More on configure class

Değişken bütün sayfalarda mevcut olduğundan emin olmak için bir yolu (örneğin küresel biçimlendirimleri gibi) ön denetleyicisi (normalde index.php) ya da diğer herhangi bir zaman dahil dosyasında tanımlamak için, başka bir seçenek kullanmak olabilir $_SESSION süper global.

Sen AppController den beforeRender() veya beforeFilter() callback methods Youse olabilir. :)

Bunlar işime her sayfa isteği üzerine çağrılır. :)

Eğer farklı kontrolörler bir değer erişmek için, bunu farklı kontrolör yöntemlerle ulaşılabilir böylece bir veritabanı kaydının içine değerini kaydetmek gerekir. Her denetleyici çağrı kendi bağlamında var ve sadece komut dış depolanan veri paylaşabilirsiniz.

Bu gibi durumlarda, ben (id, ad ve değer gibi alanlar ile) bir tercihleri ​​tablo oluşturduk. Sonra $ tüm kontrolörler için kullanılabilir hale getirmek için app_controller değer kullanır ekleyin. Son olarak, sadece bir bulmak çağrısı ile yakala. (Yani $ foo = $ this-> Tercihler-> find ('ilk', array ('koşullar' => array ('name' = 'foo')));