Experimentální DebugPanel – RequestsPanel
- jasir
- Člen | 746
Vytvořil jsem experimentální panel pro DebugBar, který zobrazuje
data mezi requesty, tzn. zobrazuje všechny redirecty/forwardy v rámci
aplikace.
Zatím to je ve fázi nápadu, ale dávám to sem, protože už teď mi to
přijde docela užitečné.
Použití:
zaregistrovat panel – musí být v metodě startup BasePresenteru, v bootstrap.php to nebude fungovat
<?php
use \Extras\Debug\RequestsPanel;
class BasePresenter extends Presenter {
public function startup() {
parent:startup()
RequestsPanel::register();
}
}
?>
v rámci aplikace můžete do panelu dumpovat:
<?php
RequestsPanel::dump($presenter->getIdentity(), 'Identity'); //label můžete vynechat
?>
Dobré na tom je, že je pěkně vidět flow aplikace a při přesměrování
neunikne
dump informace.
Defaultně se vypisují HttpRequest, PresenterRequest a PresenterResponse.
Panel si ukládá potřebná data do session.
https://github.com/…equestsPanel
Edit: 19.4.2010 – Upraven popis registrace panelu, musí proběhnout v BasePresenteru
Edit: 11.10.2010 – Změna registrace panelu, používají se namespaces
Editoval jasir (11. 10. 2010 16:01)
- Honza Kuchař
- Člen | 1662
Do extras s tím! Vytvoř tam na to novou sekci „Panely pro ladící lištu nástrojů“ do popisku nějaký odkaz na to co to je debugbar. :)
- Mikulas Dite
- Člen | 756
Mě to taky nefunguje (asi je to stejný problém) – boří to
foreach ($logs as ... )
v šabloně, protože logs je
NULL
. Session beží, takže kvůli tomu to snad nezlobí.
- jasir
- Člen | 746
Problém nastává pokud se panel registruje v bootstrapu, protože se
potřebuje navěsit na onShutdown presenteru a presenter v bootstrapu ještě
neexistuje. Panel se totiž potřebuje
dostat k presenterResponse (tu vyhodí Presenter::run).
Já panely registruji v BasePresenter::startup, problém se u mě neprojevil.
Bohužel k PresenterResponse se v současné verzi Nette dostat nedá,
nikde se neukládá a žádný callback ho nepošle ani není volán před
$presenter->run
s již vytvořeným presenterem.
Jediným možným v současné chvíli řešením je tedy registrovat panel
v metodě startup
BasePresenteru
Editoval jasir (19. 4. 2010 16:51)
- dakota
- Člen | 148
Vyskušal som RequestPanel. Problem nastava pri použití forwardu. Ak je panel registrovaný v startupe BasePresenteru dojde pri forwarde k viacnasobnej registrácii panelu do DebugBaru (tiež sa viackrát zobrazuje).
Pridaním udalosti onResponse do životného cyklu aplikácie https://forum.nette.org/…lu-aplikacie by sa dalo registrovať panel v bootstrape (potom treba upraviť aj kod RequestPanelu).
Inak užitočný panel. Možno by sa dalo doplniť zobrazenie SQL prikazov ktoré sa vykonali pri jednotlivých requestoch a hlavne pred redirectom, ktoré dibi v DebugBare nezobrazuje.
Editoval dakota (11. 10. 2010 8:15)
- bojovyletoun
- Člen | 667
v posledních verzích nette se nerozbalují šipky. (nebo je to doctype htm>?)
do bar.requests.panel.phtml přidat(2 výskyty:
<a class=„nette-toggler“
přidat atribut rel=next
OT: jak je tam preg replace callback, tak Ony se kešují?proč?kam? jak
často?
trvalo dost dlouho, než jsem přišel proč na localhostu to jde dávno, a na
sevru se rozbaluje jen první úroveň?
- dakota
- Člen | 148
bojovyletoun napsal(a):
v posledních verzích nette se nerozbalují šipky. (nebo je to doctype htm>?)
Môžeš v RequestsPanel.php
$entry['dumps']['HttpRequest'] = Debug::dump($httpRequest, TRUE);
$entry['dumps']['PresenterRequest'] = Debug::dump($request, TRUE);
$entry['dumps']['PresenterResponse'] = Debug::dump($response, TRUE);
nahradiť
$entry['dumps']['HttpRequest'] = $httpRequest;
$entry['dumps']['PresenterRequest'] = $request;
$entry['dumps']['PresenterResponse'] = $response;
a v šablone prepísať na
<?php foreach ($entry['dumps'] as $key => $dump): ?>
<tr>
<td><strong><?php if (!is_numeric($key)) echo $key;?></strong></td>
<td><?php echo DebugHelpers::clickableDump($dump) ?></td>
</tr>
<?php endforeach ?>
DebugHelpers::clickableDump – je priamo v Nette.
Edit:
Tiež stačí doplniť ako si uviedol rel=‚next‘ na <a href=‚#‘ class=‚nette-toggler‘ rel=‚next‘>
Editoval dakota (16. 11. 2010 11:51)
- bojovyletoun
- Člen | 667
taky jsem neznal clickable dump..
Ot=
Prostě jsem tam přidal rel=„next“,aby to chodilo.
na localhostu OK= Abbyss web server, php 5.3.3
Nahráno na php5.cz – php 5.3.3. dotbeb0+ Apache2. Tam mi nešly rozkliknout (tohle slovo nenávidím, rozkliknout se dá tak leda myš, když na ni silou kliknete) vnitřní prvky (http,present request+response), ale vnější ano. Protože vnější výpis (a jeho rel=next) byl normálně zapsanve skriptu, zatímco vnitřní byl v callbacku. Výstup z callbacku se vůbec neměnil(žádné rel=next nepřibylo). (až po změně názvu callbacku).
Už je to srouzimelné v řeči tvého kmenu?
Editoval bojovyletoun (16. 11. 2010 21:32)
- stefi023
- Člen | 71
Ahoj,
pri delsim pouzivani tohoto panelu jsem zjistil takovou neprijemnost (jinak je samo super) – zapomnel jsem to na produkcnim serveru odebrat (i kdyz s vypnutym debugovanim), ale pri jakemkoliv nacteni stranky mi to do session ulozi ca 15kB, coz je u me celkem problem, pac mam napr aplikaci kde jsou uzivatele neustale prihlaseni a stranka se jim sama refreshuje – cili za den dokaze session narust klidne i na 15 – 20MB, coz pak samotnou aplikaci dosti zdrzuje.
Je na to nejaka rada? Napr nastavit pouzivane namespace nejakou expiraci ci tak?
Diky