2011-03-11 22 views
9

में इंटरबैक्टिव रूप से डीबग मोड सक्षम करें मैं सिद्धांत के साथ सिम्फनी 1.4 का उपयोग कर रहा हूं।symfony

मैं केवल यदि वर्तमान sfUser एक विशेष debugger क्रेडेंशियल है डिबग मोड सक्षम करने के लिए एक रास्ता खोजने की कोशिश कर रहा हूँ।

मैं पहले से ही एक फिल्टर है कि सिम्फोनी डिबग बार निष्क्रिय कर बनाया है sfUser इस क्रेडेंशियल (web_debug मेरी settings.yml फ़ाइल में true पर सेट है) नहीं है:

class checkWebDebugFilter extends sfFilter 
{ 
    public function execute($filterChain) 
    { 
    if(!$this->getContext()->getUser()->hasCredential('debugger')) 
    { 
     sfConfig::set('sf_web_debug', false); 
    } 

    $filterChain->execute(); 
    } 
} 

मेरी index.php फ़ाइल का कोड है:

require_once(dirname(__FILE__).'/../config/ProjectConfiguration.class.php'); 
$configuration = ProjectConfiguration::getApplicationConfiguration('frontend', 'prod', false)); 
sfContext::createInstance($configuration)->dispatch(); 

समस्या यह है, के रूप में debug मोड मेरी index.php में false को hardcoded है, यह एक है डिबगर्स के लिए भी अक्षम इसलिए वेब डीबग बार सिद्धांत विवरण और न ही समय संकेत दिखाता है।

क्या डीबग मोड को सक्षम करने का कोई तरीका है यदि वर्तमान sfUser में एक सटीक प्रमाण-पत्र है?

मैं अपने checkWebDebugFilter::execute() विधि के लिए sfConfig::set('sf_debug', true); जोड़ने की कोशिश की, लेकिन जैसा कि फिल्टर सिद्धांत बयान के बाद निष्पादित किया जाता है, वे रिकॉर्ड नहीं किया जाता।

मैं अपने index.php फ़ाइल में session_start(); जोड़ने की कोशिश की, तो $_SESSION चर के माध्यम से ब्राउज़ वर्तमान उपयोगकर्ता debugger क्रेडेंशियल है कि क्या जांच करने के लिए है, लेकिन यह काम नहीं किया है (और यह सिम्फोनी की भावना में या तो नहीं था)।

आपके उत्तरों के लिए अग्रिम धन्यवाद।

+0

मुझे लगता है कि उपयोगकर्ता का प्रमाण पत्र होने पर सबसे अच्छा तरीका एक और संदर्भ स्थापित कर रहा है। मैं एक समाधान के साथ काम कर रहा हूं लेकिन अभी तक इसे काम नहीं कर सका – Pabloks

उत्तर

-1

अपने index.php 'दृश्यपटल', 'देव' में

http://host_url/frontend_dev.php

या

लिखने तो यह

आप web_debug पैनल सक्षम करना चाहते हैं, तो (देव) मोड की कोशिश करो, सच।

requ_once (dirname (फ़ाइल)।/../config/ProjectConfiguration.class.php '); $ कॉन्फ़िगरेशन = प्रोजेक्ट कॉन्फ़िगरेशन :: getAplicationConfiguration ('frontend', 'dev', true)); sfContext :: createInstance ($ कॉन्फ़िगरेशन) -> प्रेषण();

+1

उत्तर के लिए धन्यवाद, लेकिन मुझे डर है कि आप सवाल को समझ नहीं पाए; समस्या डीबग मोड को सक्रिय नहीं कर रही है लेकिन इसे सक्रिय कर रही है _interactively_। इसका मतलब है कि मैं वर्तमान 'sfUser' (और इसके प्रमाण-पत्रों में से) पर' index.php' _depending_ की सामग्री को बदलने का एक तरीका ढूंढ रहा हूं। – Phen

1

जब आप index.php फ़ाइल में डीबग पैरामीटर पास करते हैं, तो यह वास्तव में आपके एप्लिकेशन के sfAplicationConfiguration क्लास को पास कर दिया जाता है। आपके मामले में यह /apps/frontend/config/frontendConfiguration.class.php फ़ाइल में पाया जा सकता है। frontend कॉन्फ़िगरेशन क्लास sfAplication कॉन्फ़िगरेशन बढ़ाता है, और यहां आप अपना कोड जोड़ सकते हैं।

डीबग पैरामीटर इस वर्ग की एक संरक्षित चर में संग्रहीत किया जाता है, तो आप अभ्यस्त फिल्टर से इसे बदलने के लिए सक्षम हो, लेकिन आप उदाहरण के लिए एक समारोह बना सकते हैं:

setDebug($mode) { 
    $this->debug = $mode; 
} 

और आपके फ़िल्टर में यह कहते हैं:

$this->context->getConfiguration()->setDebug(true); 

तुम भी, frontendConfiguration कक्षा में isDebug() फ़ंक्शन ओवरराइड क्योंकि उस समय संकेतकों और अन्य डीबगिंग सामान प्रारंभ करने में initConfiguration() फ़ंक्शन में प्रयोग किया जाता है हो सकता है।

if ($this->isDebug() && !sfWebDebugPanelTimer::isStarted()) 
{ 
    sfWebDebugPanelTimer::startTime(); 
} 

लेकिन तुम यहाँ उपयोगकर्ता अनुमतियों की जाँच करने के, के रूप में sfUser वर्ग अभी तक इस अवस्था में आरंभ नहीं किया जा जाएगा में सक्षम नहीं होगा। लेकिन आप उस मूल्य के लिए $ _COOKIES या $ _SESSION ग्लोबल वेरिएबल देख सकते हैं, जिसे आप लॉग इन करते समय सेट कर सकते हैं। या आप अपने फ़िल्टर में sfWebDebugPanelTimer :: startTime() को कॉल कर सकते हैं, लेकिन कुछ माइक्रोसेकंड याद करेंगे।

मैंने इसका परीक्षण नहीं किया है, लेकिन इस तरह मैं इसे करूँगा।

+0

इसके बारे में धन्यवाद। मैंने दूसरे समाधान की कोशिश की, लेकिन 'session_start()' को 'frontendConfiguration.class.php' से पहले नहीं कहा जाता है क्योंकि मुझे कुछ ** अपरिभाषित चर: _SESSION ** नोटिस मिल रहा था। – Phen

+0

या शायद सिम्फनी अपने sfUser को प्रारंभ करने के बाद '_SESSION' वैश्विक सरणी को अनसेट करता है ... – Phen

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