Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Piotr Śliwa, dodany: 29.03.2017 19:19, tagi: php

Ostatnio przygotowywałem pull requesta dla biblioteki typesafe/config - prosty ficzer. Okazało się, że po moich zmianach build na windowsach przestał przechodzić. Po czasochłonnej inwestygacji, debugowaniu i namierzaniu problemu, okazało się, że winowajcą jest tytułowy TimeZone.getDefault(). Gdy to odkryłem, uświadomiłem sobie dlaczego tak bardzo doceniłem niemodyfikowalne obiekty, brak side effectów i czyste funkcje.

W czym był problem? Pliki HOCON (format plików konfiguracyjnych wspierany przez tą bibliotekę) mogą includować inne pliki konfiguracyjne. Do odczytywania takich plików używana jest klasa URLConnection. W implementacji tej biblioteki wywoływana jest funkcja URLConnection.getContentType() aby sprawdzić jakiego typu plik jest wczytywany. Metoda ta pobiera nagłówki połączenia, w którym jest data ostatniej modyfikacji. Jeśli jest data, to trzeba ją sformatować. Klasa SimpleDateFormat używa domyślnej strefy czasowej, chyba że powiemy jej inaczej. TimeZone.getDefault(), wbrew sugestywnej nazwie i zasadzie najmniejszego zaskoczenia, ma side effect, a jak! Jak to, dlaczego? Bo może! Wywołuje bowiem System.setProperty("user.timezone", <strefa czasowa>) jeśli takie property nie jest jeszcze ustawione. Pech w tym, że typesafe/config wczytuje java propertisy robiąc w testach asercje na tychże wartościach. W zależności czy TimeZone.getDefault() było wcześniej wywołane i czy user.timezone było jawnie ustawione, testy mogły failować lub też nie (co też miało miejsce).

Autor wpisu: zleek, dodany: 09.03.2017 15:13, tagi: php

Sometimes we have to apply dynamic data (fetched from database) to form fields. Good example is to deliver an option to choose a preferred language during user registration. Let say we have two available languages on the begining, but we

Autor wpisu: Kamil Adryjanek, dodany: 09.03.2017 08:08, tagi: php, symfony

W lutym świtało dzienne ujrzała pierwsza oficjalna wersja aplikacji demo dla frameworka Symfony. Aplikacja demo istniała już wcześniej i była bardzo ciekawym żródłem z przykładami wykorzystania podstawowych możliwości Symfony – przede wszystkim dla osób nie znających tego frameworka – sam niejednokrotnie polecałem ją na szkoleniach dla początkujących z Symfony. W tym momencie demo ewoluowało, zostało dostosowane do nowości, które pojawiły się zarówno w ostatnich wersjach frameworkach oraz PHP i jest aktywnie rozwijane.

Aby wygenerować aplikację „demo” wystarczy z wiersza poleceń wprowadzić polecenie:

# using Symfony installer
symfony demo

wykorzystując do tego instalator Symfony, który możecie znaleźć tutaj.

Następnie należy załadować dane testowe by móc w pełni korzystać z aplikacji demo. I to wszystko – nie ma potrzeby wywyoływania dedykowanych komend dla danych testowych: zostały odpowiednio przygotowane podczas instalacji projektu demo.

Aplikacja posiada wszystkie podstawowe funkcjonalności jakie możemy znaleźć na blogu wraz z kodem zródłowym i obszernymi komentarzami:

  • możliwości przeglądania artyułów wraz ze stronicowaniem;
  • możliwość dodawania, edycji i usuwania artykułów z poziomu panelu administratora – dane dostępowe dostępne są po kliknięciu w link: „Przeglądaj panel administracyjny”;
  • możliwość dodawania komentarzy do artykułów – wymagane odpowiednie uprawnienia użytkownika;
  • formularz logowania i poziomy uprawnień użytkowników – dostęp do panelu admina wymaga wyższych uprawnień niż dostęp do częsci publicznej;
  • wielojęzyczność aplikacji;
  • RSS feed;

Dodatkowo aplikacja demo pokazuje w jaki sposób korzystać z zewnętrznych bundli (PagerFanta dla stronicowania), w jaki sposób definiować własne typy pól formularza (DatePicker, tagowanie artykułów), jak zarządzać uprawnieniami użytkowników czy też jak prawidłowo definiować realcji pomiędzy encjami w Doctrine2. Kod aplikacji demo znajduje się na GitHubie, gdzie można wysyłać propozycje nowych / brakujących funkcjonalności czy też zgłaszać błędy.

Artykuł Symfony: aplikacja demo pochodzi z serwisu Notatki Programisty.

Wszystkie wpisy należą do ich twórców. PHP.pl nie ponosi odpowiedzialności za treść wpisów.