2011-03-11 19 views
9

Doctrine ile birlikte symfony 1.4 kullanıyorum.Symfony'de hata ayıklama modunu etkinleştirin

Sadece geçerli sfUser özel bir debugger kimlik bilgisine sahipse, hata ayıklama modunu etkinleştirmenin bir yolunu bulmaya çalışıyorum. Benim index.php dosyanın kodudur

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

    $filterChain->execute(); 
    } 
} 

: sfUser bu kimlik (web_debug benim settings.yml dosyasında true ayarlanır) etmediyse

Zaten symfony ayıklama çubuğunu devre dışı bırakır bir filtre oluşturuldu:

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

debug mod benim index.php yılında false için kodlanmış olarak problem, bu bir olduğunu Hata ayıklayıcılar için devre dışı bırakıldı; Bu nedenle, Web hata ayıklama çubuğunda Doktrin ifadeleri veya zamanlama göstergeleri gösterilmez.

Sadece geçerli sfUser tam bir kimlik bilgisine sahipse, hata ayıklama modunu etkinleştirmenin bir yolu var mı?

benim checkWebDebugFilter::execute() yöntemine sfConfig::set('sf_debug', true); eklemek çalıştı ama filtre Doktrini açıklamalardan sonra yürütüldüğünde, onlar kaydedilmez.

Ben de o zaman geçerli kullanıcı debugger kimlik bilgilerine sahip olup olmadığını kontrol etmek $_SESSION değişken üzerinden tarama, benim index.php dosyada session_start(); eklemeyi denedim ama işe yaramadı (ve o da symfony ruhuna değildi).

Yanıtlarınız için şimdiden teşekkür ederiz.

+0

En iyi yaklaşımın, kullanıcı kimlik bilgisine sahip olduğunda başka bir bağlam koyması olduğunu düşünüyorum. Ben bir çözüm ile çalışıyorum ama henüz çalışmaz coudn't – Pabloks

cevap

-1

http://host_url/frontend_dev.php

veya

yazma senin index.php 'önyüzü', 'dev' de o zaman bu

Eğer web_debug panelini etkinleştirmek istiyorsanız (dev) modu deneyin, doğru.

require_once (dirname (DOSYA). '/ ../config/ProjectConfiguration.class.php'); $ configuration = ProjectConfiguration :: getApplicationConfiguration ('frontend', 'dev', true)); sfContext :: createInstance ($ configuration) -> gönderme();

+1

Cevabınız için teşekkürler, ama korkarım ki; Sorun, hata ayıklama modunu etkinleştirme değil, etkinleştirme _interactively_. Şu anki 'sfUser'de (ve onun kimlik bilgilerinden) 'index.php'_depending_'nin içeriğini değiştirmenin bir yolunu buluyorum. – Phen

1

Hata ayıklama parametresini index.php dosyasında geçirdiğinizde, aslında uygulamanızın sfApplicationConfiguration sınıfına aktarılır. Durumunuzda /apps/frontend/config/frontendConfiguration.class.php dosyasında bulunabilir. frontendConfiguration sınıfı sfApplicationConfiguration öğesini genişletir ve buradan kodunuzu ekleyebilirsiniz.

ayıklama parametresi bu sınıfın korumalı bir değişkende saklanır, böylece alışkanlık filtreden bunu değiştirmek mümkün, ancak örneğin bir işlev oluşturabilirsiniz edilir:

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

Ve filtrenizde diyoruz: bu zamanlama göstergeler ve diğer hata ayıklama şeyler başlatmak için initConfiguration() fonksiyonunda kullanıldığı için

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

Ayrıca, frontendConfiguration sınıfında IsDebug() işlevini geçersiz olabilir.

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

Ama sfUser sınıfı henüz bu aşamada başlatıldı olmayacak gibi burada kullanıcı izinleri kontrol etmek mümkün olmayacaktır. Ancak, kullanıcı oturum açtığında ayarlayabileceğiniz bir değer için $ _COOKIES veya $ _SESSION genel değişkenini kontrol edebilirsiniz. Ya da sfWebDebugPanelTimer :: startTime() 'ı Filtrenizde arayabilir ancak birkaç mikro saniyeyi kaçırabilirsiniz.

Bunu test etmedim, ancak böyle yaparım.

+0

Bunun için teşekkürler. İkinci çözümü denedim, fakat 'session_start()' 'frontendConfiguration.class.php' den önce bazı çağrılar gelmeden çağrılmıyor gibi görünüyor ** Tanımsız değişken: _SESSION ** bildirimleri. – Phen

+0

Veya symfony, sfUser'ını başlattıktan sonra '_SESSION' global dizisini ... – Phen

İlgili konular