7
cze

symfony: Pobieranie wszystkich wiadomości typu „flash”.

Problemy, jakie napotykamy podczas programowania wszelkiego rodzaju aplikacji można podzielić na dwie główne kategorie – wymagające doświadczenia i wymagające wiedzy. O ile te związane z doświadczeniem można rozwiązać bez pomocy innych – rozwiązania można po prostu wywnioskować na podstawie doświadczenia, o tyle związane z wiedzą nie są takie proste. Ich rozwiązanie to zdobycie informacji o tym, co należy zrobić, żeby było dobrze, a do rzeczonej informacji czasem bardzo ciężko się dostać. W dzisiejszym wpisie chciałbym właśnie dla swojej i Waszej referencji opisać jeden problem związany z „wiedzą” w symfony.

symfony: Pobieranie wszystkich wiadomości typu „flash”.

Framework symfony, podobnie jak kilka innych na rynku oferuje funkcjonalność tzw. „flashów” [flashy?]. Czym jest flash? Otóż, jest to jednorazowa wiadomość [komunikat, informacja - ogólnie jakaś wartość, najczęściej typu string], która kasuje się automatycznie po wyświetleniu, a właściwie pobraniu z kontenera która jest przechowywana tylko podczas jednego żądania – jest ona usuwana pod koniec jego wykonywania [dzięki za komentarz, @Kuba ;]]. Może to np. być komunikat o poprawnym zalogowaniu w serwisie – wiadomo, że wyświetlimy go tylko raz po zalogowaniu, bo potem jest on zwyczajnie niepotrzebny.

Flashe w symfony tworzymy w następujący sposób:

$this->getUser()->setFlash('name', 'This is flash message!');

A następnie możemy je wyświetlić w następujący sposób:

echo '<span class="flash">'.$sf_user->getFlash('name').'</span>';

Problem powstaje jednak w momencie, kiedy chcemy uzyskać listę wszystkich zarejestrowanych w trakcie wykonywania skryptu wpisów. Otóż zmienna $sf_user [obiekt klasy sfUser] niestety nie posiada metody getAllFlashes(), albo jakiejkolwiek innej, która realizowałaby jej założenia.

Oczywiście my wiemy w kontrolerze, jakie nazwy nadaliśmy naszym wiadomościom, ale dobrze byłoby dostać listę zarejestrowanych, zamiast próbować wszystkich identyfikatorów. Przyznam, że w Internecie jest bardzo mało informacji na ten temat i aż się zdziwiłem, kiedy znalazłem rozwiązanie dopiero gdzieś w małym poście na grupach dyskusyjnych symfony. Czy nikt nie miał wcześniej tego problemu i nie potrzebował takiej listy? Dziwne, ale może faktycznie każdy używał flashów zgodnie z ich założeniem używając jednej nazwy w całym serwisie.

Cóż, nawet jeśli tak było, to zgodnie ze wstępem publikuję kod, pozwalający na pobranie listy wszystkich wiadomości typu flash w symfony 1.4:

$allFlashes = $sf_user->getAttributeHolder()->getAll('symfony/user/sfUser/flash');

W zmiennej $allFlashes znajduje się prosty array zawierający klucze i wartości poszczególnych flashów. Można z niego skorzystać np. tak:

foreach($allFlashes as $flash => $value)
	{
	$flashMessage = $sf_user->getFlash($flash);
	switch($flash)
		{
		// different flash types as case options
		default:
			{
			echo '<div class="flash">'.$flashMessage.'</div>';
			}
		}
	}

Tym pozytywnym akcentem pragnę zakończyć dzisiejsze rozważania – do zobaczenia w piątek!

Warto przeczytać.

Trwa ładowanie…

Subscribe without commenting

Wyszukaj:
Twitter
http://t.co/piYQJA2z /cc @merowing_ you'll like it :)
3 days ago
"It is about being polite, respectful and kind. That's the open source currency. Can't pay in these values? You shouldn't be using it."
4 days ago
Facebook
© Copyright 2010-2012 Tomasz Kowalczyk. All rights reserved. Created by Dream-Theme — premium wordpress themes. Proudly powered by WordPress.