2010-11-23 15 views
5

में प्रयोग करने के लिए वैश्विक सरणी स्थिरांक को परिभाषित करें मैंदृश्य

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

दृश्य फ़ाइल में कोड bootstrap.php में वैश्विक सरणी निरंतर

कोड को परिभाषित करना चाहते

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

लेकिन केकेएफपी त्रुटि देता है:

"Undefined variable: adv_types"

+0

यदि आप इसे फॉर्म विकल्प (जैसा लगता है) के लिए उपयोग कर रहे हैं, तो आप कुछ ऐसा उपयोग करना चाहेंगे: http://www.dereuromark.de/2010/06/24/static-enums-or-semihardcoded-attributes/ – mark

उत्तर

5

ये आपके app_controller.php में निर्धारित करने की आवश्यकता है, और फिर अपने विचार

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

को पारित कर दिया, bootstrap.php इस निरंतर

+0

यदि यह सरणी डेटाबेस से गतिशील है तो क्या इस सरणी को AppModel से बनाने का कोई तरीका है? –

8

दुर्भाग्य के लिए सही फ़ाइल, के लिए गुंजाइश नहीं है bootstrap.phpbootstrap.php है, इसलिए $adv_types वैरिएबल बाहर निकल जाएगा जैसे ही PHP bootstrap.php पार्सिंग को पूरा करता है।

आपकी वास्तविक आवश्यकताओं के आधार पर आप कई दृष्टिकोण ले सकते हैं।

समाधान 1: आप अपने विचारों

आप चर की जरूरत है सभी दृश्यों में उपलब्ध होने के लिए आपको को परिभाषित करने और AppController::beforeRender() में यह निर्धारित करना चाहिए के कई में इस चर की जरूरत है।

app/app_controller.php में:

class AppController extends Controller 
{ 

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

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

यह $adv_types सरणी तक पहुँचने के लिए अपने किसी भी दृश्य की अनुमति देगा।

समाधान 2: यदि आप अपने CakePHP एप्लिकेशन

के भीतर कहीं भी इस चर के लिए उपयोग की जरूरत है तो आप अपने ऐप में कहीं $adv_types चर का उपयोग करना आवश्यक है हो सकता है आप Configure संग्रह करने के लिए जोड़ सकते हैं। bootstrap.php में:

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

मैं एक छद्म नाम स्थान के रूप में अपनी परियोजना के नाम का उपयोग करना चाहिये; adv_types अन्य पहचानकर्ताओं के साथ संघर्ष करने की संभावना नहीं है, लेकिन यदि आप इस दृष्टिकोण का अधिक बार उपयोग करना शुरू करते हैं, तो संघर्ष बनाने की संभावना बढ़ जाती है। इसके अतिरिक्त, यह आपको एक नामस्थान के तहत Configure संग्रह में संग्रहीत डेटा को समूहित करने की अनुमति देता है, जो डिबगिंग के लिए आसान हो सकता है।

वैसे भी, यह दृष्टिकोण आपको Configure::read() का आह्वान करके केकेपीएचपी छतरी के नीचे किसी भी दायरे में चर का उपयोग करने की अनुमति देगा।इस प्रकार:

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

समाधान 3: आप पूरी तरह इस चर एक वैश्विक चर के रूप में उपलब्ध होना आवश्यक है

आप बिल्कुल एक मानक PHP वैश्विक चर के रूप में यह होना आवश्यक है, तो आपको निम्न कर सकता है:

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

ऐसा करने से पहले, पर विचार करें कि क्या यह अत्यंत आवश्यक होता है। वैश्विक चर वास्तव में गन्दा व्यवसाय हैं, और आपके पास होना चाहिए और इसे उचित ठहराने के लिए की आवश्यकता होनी चाहिए।


संपादित/अपडेट करें!

Google अनुवाद में तीस सेकंड ने मुझे यह पता लगाने के लिए प्रेरित किया है कि आपके सरणी में कुंजी के अनुरूप अनुवाद शामिल हैं। आप केकपीएचपी की Internationalization & Localization सुविधाओं का उपयोग करके जांच कर सकते हैं ताकि अंग्रेजी और रूसी शब्दों के बीच शीर्ष/बाएं/दाएं/नीचे (और बाकी सब कुछ) के बीच भेद को दूर किया जा सके।

+0

समाधान के लिए डैनियल धन्यवाद लेकिन यह अनुवाद के लिए नहीं है, यह केवल एड जगह के प्रकार को परिभाषित करता है। – baur79

संबंधित मुद्दे