2009-07-02 8 views
13

मैं ज़ेंड फ्रेमवर्क से शुरुआत कर रहा हूं और मैं बूटस्ट्रैप फ़ाइल को समझना चाहता हूं। मैंने सभी _init विधियों को डिफ़ॉल्ट रूप से निष्पादित किया है लेकिन यह मुझे भ्रमित लगता है। वैसे भी वह नहीं है जो मैं पूछना चाहता हूं।ज़ेंड फ्रेमवर्क लेआउट

$this->bootstrap('layout'); कार्रवाई के आसपास आया और मुझे यकीन नहीं है कि मैं इसे समझता हूं। क्या यह application.ini फ़ाइल में resource.layout चर है? मैं गहराई में बूटस्ट्रैप प्रक्रिया को वास्तव में समझना चाहता हूं।

मैं आपको चरण-दर-चरण स्पष्टीकरण के लिए पूछ रहा हूं। अग्रिम धन्यवाद!

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap 
{ 
    protected function _initAutoload() 
    { 
     $moduleLoader = new Zend_Application_Module_Autoloader(array(
      'namespace' => '', 
      'basePath' => APPLICATION_PATH 
     )); 
     return $moduleLoader; 
    } 

    function _initViewHelpers() 
    { 
     $this->bootstrap('layout'); 

     $layout = $this->getResource('layout'); 
     $view = $layout->getView(); 
     $view->doctype('XHTML1_STRICT'); 
     $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html;charset=utf-8'); 
     $view->headTitle()->setSeparator(' - '); 
     $view->headTitle('Zend Framework Tutorial'); 
    } 
} 
+0

बस मेरे ट्विटर स्ट्रीम https://twitter.com/joedevon/status/2464729062 पर इस प्रश्न से जुड़ा हुआ है, उम्मीद है कि कोई जल्द ही एक विस्तृत विस्तृत स्पष्टीकरण के द्वारा पॉप करेगा। मुझे यह पूरी तरह से काम कर रहा है, लेकिन यह सब कुछ पूरी तरह से समझ में नहीं आता :) – joedevon

+0

$ यह-> बूटस्ट्रैप ('लेआउट'); यह लाइन यह सुनिश्चित कर रही है कि 'लेआउट' को शेष _initViewHelpers() चलाए जाने से पहले सेट अप किया गया है। – berty

उत्तर

1

मुझे पता चला है कि:

तो यह मेरी बूटस्ट्रैप फ़ाइल है $ इस- बुला> बूटस्ट्रैप ('संसाधन'); अगर 'संसाधन' एप्लिकेशन/configs/application.ini फ़ाइल में नहीं है तो काम नहीं करेगा। तो आपके प्रश्न का मेरा जवाब 'हां' होगा, आपको application.ini फ़ाइल में लेआउट संसाधन को निम्नलिखित के साथ परिभाषित करना होगा: resource.layout.layoutPath = APPLICATION_PATH "/ लेआउट/स्क्रिप्ट्स" (या अन्य डीआईआर।)

दुर्भाग्य से ज़ेंड फ्रेमवर्क दस्तावेज मेरी राय में वास्तव में खराब है। विशेष रूप से इस विषय पर।

मेरी राय यह है कि यदि आप ज़ेंड फ्रेमवर्क के विवरण और कार्यप्रणाली में गहराई से जाना चाहते हैं तो आपको एक बेहतर दस्तावेज़ के साथ एक संस्करण की प्रतीक्षा करनी चाहिए (या यदि आप हैं तो ज़ेंड लाइब्रेरी क्लासेस का स्रोत कोड देख सकते हैं पहर)।

+2

हां, इस मामले में जेडएफ मैनुअल सिर्फ बकवास का भार है और कोई उदाहरण नहीं है। सच में ख़राब। मुझे उम्मीद है कि कुछ ट्यूटोरियल जल्द ही/या बेहतर मैनुअल होंगे। –

+2

जेडएफ मैनुअल कई बार एक लंगड़ा है और विकी/ट्यूटोरियल की तरह है। हालांकि, अगर आप पढ़ना जारी रखते हैं और जेडएफ के साथ प्रोग्रामिंग सामान रखते हैं, तो अंततः आप उन सभी भागों को समझते हैं जिनके साथ आप काम करते हैं - कम से कम यह मेरे लिए था। दस्तावेज़ों में अधिकांश चीजें शामिल होती हैं, लेकिन वे यहां और वहां बिखरी हुई हैं। तो क्या हो रहा है इसकी गहरी समझ प्राप्त करने के लिए यह बहुत सारे जोखिम और झुकाव लेता है। सौभाग्य! –

2

उपलब्ध विकल्पों के लिए इस documentation का संदर्भ लें।

Zend_Aplplication स्वचालित रूप से application.ini में कुछ भी बूटस्ट्रैप करेगा जो संसाधनों से शुरू होता है।

ध्यान दें कि यदि आप अपनी आईएनआई फ़ाइल में कुछ नहीं डालते हैं, तो यह लोड नहीं होगा। जैसे डिफ़ॉल्ट रूप से कोई लेआउट लोड नहीं होता है। आप या तो एक या फिर दोनों को निम्नलिखित लेआउट के आवेदन लिए सक्षम हो जाएंगे शामिल हैं:

resources.layout.layoutPath = APPLICATION_PATH "/layouts" 
resources.layout.layout = default 

सबसे महत्वपूर्ण है को एहसास है कि यह चूक जहां मूल्यों दर्ज नहीं हुए लोड होगा, मुझे समझाती हूँ है: तक डिफ़ॉल्ट रूप से बूटस्ट्रैप में दृश्य संसाधन उपलब्ध नहीं होगा, क्योंकि कोई भी ini में सेट नहीं है। लेकिन अगर आप आरं में रखते:

resources.view[] = 

तो आप कॉल कर सकते हैं:

$this->boostrap('view'); 
$view = $this->boostrap()->getResource('view'); 

तो फिर तुम बूटस्ट्रैप, उदा से आपको अपने ऐप्लिकेशन की दृष्टि से कुछ कर सकते हैं

$view->doctype("HTML5"); 

इसके अलावा, आपके _initAutoload आवश्यक नहीं अब और है, और

appnamespace = "" 
.ini में

साथ प्रतिस्थापित किया जा सकता है। मैं सहमत हूं कि बूटस्ट्रैपिंग और आईएनआई विकल्प बहुत खराब दस्तावेज हैं।

//////////////////////////////////////////////// //////////////////////////////////

सीखने हाथों के लिए किसी और

:

protected function _initIniDump() 
{ 
    $ini = new Zend_Config_Ini(APPLICATION_PATH . '/configs/application.ini', 'development'); 
    Zend_Debug::dump($ini->toArray(), 'APPLICATION.INI');die(); 
} 

कि डंप आप इसे यह के अनुसार लोड करता है, कि Zend संसाधनों सरणी, कुछ भी है कि यह पहचानता से अधिक पुनरावृति जाएगा देखेंगे में ज्ञान

:)

आशा है कि मदद करता है है।

6

application.ini

resources.layout[] = 

से लाइन के बराबर है:

Bootstrap.php में
_initLayout() {} 

उन दोनों नई वस्तु आरंभ कर रहे हैं, और इस वस्तु एक bootstrap परम के रूप में सेट किया गया है, जो कुछ अनुप्रयोग संसाधनों के लिए एक कंटेनर है (_init विधियों द्वारा लौटाए गए मान)।

एक के बाद एक वहाँ क्रियान्वित कर रहे हैं, तो सुनिश्चित करने के लिए एक संसाधन वर्तमान एक से पहले आरंभ नहीं हो जाता, आप के लिए मजबूर, का उपयोग करते हुए:

_initSomeResource() { 
    $this->bootstrap('otherResource'); 
    // .. 
    return $someValue; 
} 

_initOtherResource() { 
    // .. 
} 

तो संसाधनों की instantiating के आदेश है:

  1. otherResource
  2. someResource

अब, आप भी उपयोग कर सकते हैं:

$bootstrap->getParam('someResource'); // returns $someValue 

ध्यान दें, आप Circular Dependency त्रुटि का सामना करना हो सकता है कि, जब आप हर एक से पहले एक दूसरे को निष्पादित करने का प्रयास करें।

आप जितनी चाहें _init विधियों का उपयोग कर सकते हैं, लेकिन उन्हें पुन: प्रयोज्य बनाने के लिए, आप Zend_Application_Resource_Abstract कक्षा को लागू करने के लिए उन्हें अपनी कक्षा में अलग कर सकते हैं।

बॉक्स बॉक्स संसाधनों में से कुछ हैं, जिन्हें आप Zend/Application/Resource निर्देशिका में पा सकते हैं। इन संसाधनों, आप application.ini से यानी बात कर रहे हैं, .:

resources.view.encoding = "utf-8" ; in application.ini 
Zend/Application/Resource/View.php (path to the resource class) 
Zend_Application_Resource_View::setEncoding('UTF-8'); // equivalent pseudocode 

आशा है कि यह अब और अधिक स्पष्ट है कर रहे हैं।