2010-11-23 16 views
5

Görünümde kullanmak için genel dizi sabitini tanımla

kodlu

$adv_types = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее');

xzxx xzxx

echo $form->input('Adv.type', array('type' => 'select', 'option' => $adv_types, 'label' => 'Место рекламы'));

xzxx

echo $form->input('Adv.type', array('type' => 'select', 'option' => $adv_types, 'label' => 'Место рекламы'));

fakat cakephp hata veriyor:

"Undefined variable: adv_types"

+0

Eğer (göründüğü gibi), gibi bir şey kullanmak isteyebilirsiniz formu seçenekleri için onu kullanıyorsanız: http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/ – mark

cevap

5

Bu

"Undefined variable: adv_types"

sizin app_controller.php belirlenen gerekir ve daha sonra görüşleriniz Bana göre

// app_controller.php 
class AppController extends Controller { 
     var $adv_types = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее'); 
     function beforeFilter() { 
      $this->set('adv_types', $this->adv_types); 
     } 
} 

geçirilen, bootstrap.php Maalesef bu sabit

+0

Bu dizi veritabanından dinamikse, bu diziyi AppModel'den yapmanın herhangi bir yolu var mı? –

8

için doğru dosya, kapsamı değildir bootstrap.phpbootstrap.php, $adv_types değişkeni, PHP ayrıştırma bootstrap.php tamamlanır tamamlanmaz kapsam dışı olur.

Gerçek gereksinimlerinize bağlı olarak yapabileceğiniz birkaç yaklaşım vardır.

Çözüm 1: görünümlerinizde

tüm görünümlerde kullanılabilir olması için değişken gerekiyorsa, tanımlamak ve AppController::beforeRender() bunu belirlesin çoğunda bu değişkenleri gerekir. app/app_controller.php yılında

:

class AppController extends Controller 
{ 

    function beforeRender() 
    { 
     parent::beforeRender(); 

     $adv_types = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее'); 
     $this->set(compact('adv_types')); 
    } 
} 

Bu $adv_types dizi erişmek için görünümlerin herhangi sağlayacaktır.

Çözüm 2: uygulamanızda başka yerde $adv_types değişken erişmesi gereken size Configure koleksiyonuna ekleyebilirsiniz, her yerde CakePHP uygulamasında

içinde bu değişkene erişmesi gerekebilir. bootstrap.php yılında:

Configure::write('NameOfYourAppAsNamespace.adv_types', array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее')); 

Ben sahte ad olarak projenizin adını kullanarak öneririz; adv_types'un diğer tanımlayıcılarla çakışması olası değildir, ancak bu yaklaşımı daha sık kullanmaya başlarsanız, çakışma oluşturma olasılığınız artar. Ayrıca, bu, Configure koleksiyonunda sakladığınız verileri bir ad alanı altında gruplandırmanıza olanak tanır, bu da hata ayıklama için kullanışlıdır.

Her neyse, bu yaklaşım, CakePHP şemsiyesi altındaki herhangi bir kapsamdaki değişkene Configure::read()'u çağırarak erişmenize izin verecektir.Böylece:

$adv_types = Configure::read('NameOfYourAppAsNamespace.adv_types'); 

Çözüm 3: kesinlikle küresel bir değişken olarak kullanılabilir bu değişkeni bulunmalıdır

kesinlikle standart PHP küresel değişken olarak bu olmalıdır , aşağıdaki yapabilirsiniz:

$GLOBALS['adv_types'] = array('top' => 'Верх', 'left' => 'Левое', 'right' => 'Правое', 'bottom' => 'Нижнее'); 

bunu yapmadan önce, bu kesinlikle gerekli olup olmadığını düşünün lütfen. Global değişkenler gerçekten dağınık bir iştir ve bir açık ve şimdi gerekçelendirmek için gereksiniminiz olmalıdır.


Edit/Update! Google saniye Çevir

Otuz senin dizi anahtarları tekabül çeviriler içerdiğini keşfetmek beni yol açmıştır. CakePHP'nin Internationalization & Localization özelliklerini kullanarak ingilizce ve rusça terimler arasındaki ayrımı ortadan kaldırmak için üst/sol/sağ/alt (ve diğer her şey) için araştırmak isteyebilirsiniz.

+0

çözümler için Daniel teşekkürler ama bu çeviri için değil, sadece adv yer türünü tanımlar. – baur79

İlgili konular