Niezalogowany [ logowanie ]
Subskrybuj kanał ATOM Kanał ATOM

Autor wpisu: Kamil, dodany: 30.10.2010 11:51, tagi: php

W niniejszym wpisie chciałbym się podzielić mechanizmem do zarządzania kanałami RSS/Atom. Jako, iż jest to bardzo pożądana funkcjonalność postaram się napisać coś łatwego w rozbudowie i zarządzaniu minimalnym nakładem pracy. Jak zapewne wiesz, mamy kilka protokołów do publikowania swoich kanałów z nowościami ze strony, m.in. RSS czy Atom. Postaramy się obsłużyć każdy z nich (i [...]

Autor wpisu: batman, dodany: 30.10.2010 08:00, tagi: php

Wczoraj (29.10) miała miejsce premiera najnowszej wersji projektu PHP for Android, którego celem jest umożliwienie programistom PHP tworzenia aplikacji na Androida. Wydanie to jest o tyle ciekawe, że wprowadza kilka wartych uwagi zmian.

Po pierwsze zaktualizowany został PHP do najnowszej wersji (5.3.3). Do PHP dodane zostało rozszerzenie openssl oraz usunięto zgłoszone wcześniej błędy. Najnowsza wersja PHP for Android działa na SL4A r3, a co za tym idzie, istnieje możliwość uruchamiania skryptów z “pulpitu” (nie wiem jak to się nazywa w Androidzie).

Najciekawszą z mojego punktu widzenia informacją, jest dołączenie do najnowszej wersji PFA mojego frameworka (PFAf) w wersji 0.1. Wydanie wersji 0.3 umożliwiło mi kontynuowanie prac nad PFAf, dzięki czemu wprowadziłem do niego kilka poprawek oraz usprawnień. Niedługo zacznę uzupełniać strony wiki oraz aktualizować polski opis na stronie projektu. Tym czasem będą musiały Wam wystarczyć plik źródłowe znajdujące się w repozytorium SVN. Katalog tags zawiera wszystkie stabilne wersje (poza najnowszą). W trunku znajdziecie aktualną stabilną wersję (wyjątkiem od tej reguły jest wersja 0.1, która znajduje się i w katalogu tags i w trunku), a w branches wszystkie wersje rozwojowe.

Ponieważ zbliża się nieco dłuższy weekend, na wszystkie pytania odpowiem dopiero w poniedziałek (ewentualnie we wtorek).

Autor wpisu: batman, dodany: 27.10.2010 08:00, tagi: zend_framework

Jedną z najgorszych czynności związanych z Zend_Form, jest pisanie w kółko tego samego fragmentu kodu – obsługi formularza. W większości przypadków obsługa ta sprowadza się do czterech kroków:

  1. Sprawdzenie, czy wysłano POSTa.
  2. Sprawdzenie, czy dane są poprawne.
  3. Przetworzenie danych.
  4. Przekierowanie na inną stronę.

Zgodnie z zasadą DRY, wypadałoby czynności te wydzielić do osobnego bloku (funkcji/metody/klasy), a następnie do tego bloku się odwoływać. Niestety na przeszkodzie stoi punkt 3, czyli operacje na danych, które nie zawsze muszą się powtarzać.

Z pomocą przychodzi tutaj PHP, a dokładniej anonimowe funkcje. Wprawdzie funkcjonalność ta jest dostępna dopiero od wersji 5.3 języka, jednak nie widzę powodu, aby nie iść z duchem czasu i trzymać się przestarzałych rozwiązań.

W przykładach będę korzystał z klasy Batman_Form, której opis znajdziecie we wpisie Uniwersalne dekorowanie Zend_Form.

Automatyczna obsługa formularzy Zend_Form sprowadza się do wykorzystania action helpera, który załaduje formularz, a następnie wykona po kolei opisane wyżej czynności. Funkcja anonimowa pozwoli na dodanie do action helpera kodu, który będzie można wykonać w ściśle określonym momencie. Na koniec tego teoretycznego wywodu napiszę jeszcze drobną uwagę. Obecna implementacja anonimowych funkcji opera się o klasę Closure i magiczną metodę __invoke. Manual enigmatycznie głosi, iż nie należy polegać na tej wiedzy, dlatego też może dojść do sytuacji, w której opisany przeze mnie sposób, przestanie działać. Rozwiązanie tego problemu jest banalnie proste i sprowadza się do usunięcia sprzed argumentu funkcji typu Closure.

A teraz do rzeczy. O pisaniu własnych helperów akcji przeczytacie w dokumentacji. W skrócie, helpery akcji są nieco okrojoną wersją pluginów i w przeciwieństwie do nich, wywoływane są na żądanie.

Kod helpera prezentuje się następująco

class Batman_Controller_Action_Helper_FormHandler extends Zend_Controller_Action_Helper_Abstract
{
    protected $_form = null;
    protected $_callbacks = array();

    public function postDispatch()
    {
        // czy wysłano POSTa
        if($this->getRequest()->isPost()) {
            $postData = $this->getRequest()->getPost();
            // czy dane są poprawne
            if($this->_form->isValid($postData)) {
                // pobranie wszystkich funkcji zwrotnych przypisanych do formularza
                $callbacks = $this->_form->getCallbacks();
                $formData = $this->_form->getValues();
                foreach($callbacks as $callback) {
                    // kolejne wywołanie zarejestrowanych funkcji zwrotnych
                    $callback($formData);
                }
            }
        }
    }

    /**
     * @return Zend_Form
     */
    public function getForm($name, $options = null)
    {
        $prefix = 'Application_';
        if(isset($options['prefix'])) {
            $prefix = $options['prefix'];
            unset($options['prefix']);
        }

        $formClass = $prefix . 'Form_' . $name;
        $this->_form = new $formClass($options);
        return $this->_form;
    }

    /**
     * @return Zend_Form
     */
    public function direct($name, $options = null)
    {
        return $this->getForm($name, $options);
    }
}

Założyłem w helperze, iż domyślną przestrzenią nazw dla klas jest Application. W większości przypadków takie założenie jest prawidłowe, jednak dla spokoju ducha, można w tym miejscu pobrać tą wartość z pliku konfiguracyjnego. Drugim założeniem jest wykorzystanie domyślnej struktury katalogów.

W sumie powyższy kod nie jest specjalnie skomplikowany. W momencie wywołania tego helpera, utworzony zostanie obiekt formularza, a następnie zwrócony do kontrolera.

Wywołanie wyżej opisanego helpera w kontrolerze wygląda nastęująco

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Zyx, dodany: 26.10.2010 21:49, tagi: php

Wszystkie znaki na niebie i ziemi wskazują, że PHP6 nie ujrzy w dającej się przewidzieć przyszłości światła dziennego, przynajmniej w takim kształcie, w jakim je znamy. Do polskiej blogosfery jakoś nie przebiły się informacje o marcowych perturbacjach wśród czołowych twórców języka, które skończyły się m.in. restartem gałęzi trunk i zawieszeniem prac nad wsparciem dla Unikodu.

Autor wpisu: batman, dodany: 26.10.2010 19:23, tagi: php

Jedną z zalet programowania na Linuksie (Uniksie) jest możliwość skorzystania z polecenia tail, które pozwala na śledzenie zmian w plikach na żywo. Okazuje się, że programiści pracujący na Windowsie również mają taką możliwość.  Z pomocą przychodzi Windows PowerShell. Wystarczy uruchomić PowerShell (domyślnie instalowany w Windows Vista oraz Windows 7) i wpisać polecenie:

Get-Content sciezka\do\pliku\log.txt –Wait

Efektem działania tego polecenia będzie wyświetlenie zawartości pliku oraz wszelkich zmian w nim dokonywanych. Mała rzecz, a cieszy.

Autor wpisu: batman, dodany: 25.10.2010 08:00, tagi: php

W poprzedniej części “PHP w chmurze”, skupiłem się na narzędziach, z których można korzystać podczas tworzenia aplikacji PHP przeznaczonej do umieszczenia w chmurze Windows Azure. Dzisiaj wyjaśnię czym jest chmura oraz opiszę podstawowe pojęcia związane z Windows Azure. Bez ich wyjaśnienia ciężko będzie zrozumieć mechanizmy rządzące chmurą.

Czym jest chmura?

Według definicji mianem chmury określa się “styl obliczeń, w którym dynamicznie skalowalne (zwykle zwirtualizowane) zasoby są dostarczane jako usługa za pośrednictwem Internetu”. Ni mniej ni więcej oznacza to tyle, że jako programista muszę zajmować się jedynie aplikacją. Konfiguracja i utrzymanie serwerów, składowanie danych, bezpieczeństwo – to wszystko spoczywa na barkach firmy dostarczającej chmurę. Co więcej, w przypadku nagłego zapotrzebowania na większą moc obliczeniową, nie muszę martwić się, że firma hostingowa mnie wyrzuci lub będę zmuszony dokupić kolejne maszyny, które po okresie wzmożonego ruchu będą z gracją pokrywać się kurzem.

Co to jest Windows Azure?

Windows Azure jest platformą składającą się z trzech niezależnych od siebie usług. Są to:

  • Windows Azure
  • SQL Azure
  • Windows Azure AppFabric

Usługa Windows Azure jest środowiskiem, w którym uruchamiane są aplikacje. Usługa ta oferuje m.in. przestrzeń dyskową do składowania zasobów (np. pliki wideo). SQL Azure jest serwerem relacyjnej bazy danych, a AppFabric odpowiada za kontrolę dostępu oraz szynę danych. O ile kontrola dostępu nie wymaga większego wyjaśnienia, tak szyna danych stanowi ciekawą usługę, która pozwala na komunikacją między aplikacjami umieszczonymi w chmurze. Aplikacje te nie muszą być napisane w tym samym języku. Najważniejsze, by korzystały z AppFabric.

Role

W ramach Windows Azure funkcjonuje pojęcie roli. Rola, w dużym uproszczeniu, jest aplikacją działającą w chmurze. Na chwilę obecną można wyróżnić dwie role:

  • web role
  • worker role

Pierwsza rola jest odpowiednikiem typowej aplikacji webowej, druga stanowi zaplecze obliczeniowe. Worker role może być aplikacją wykonującą obliczenia w tle i dostarczającą przetworzone dane do roli webowej.

Role mogą się ze sobą komunikować przy pomocy protokołu HTTP (web role i worker role) oraz TCP (worker role). Obie role mogą komunikować się z zewnętrznymi zasobami poprzez protokoły HTTP oraz HTTPS oraz mogą uzyskać dostęp do magazynu danych.

Czytaj dalej tutaj (rozwija treść wpisu)
Czytaj dalej na blogu autora...

Autor wpisu: Vokiel, dodany: 24.10.2010 22:15, tagi: jquery, css, javascript

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