PHP

39 posts in category

MtMail: e-mail module for ZF2

I'm happy to present a ZF2 module that handles composing and sending e-mail messages.

Why another module? There are a few of them already available on ZF modules website. However, when I was looking for solution to use in my application, I quickly realized that most of them are either outdated, or they miss features I needed. That's why I decided to write my own.

My intention was to create something powerful, but still simple to use. You an customize e-mail headers, add layout, automatically generate plaintext version of HTML e-mail, and so on. But you can also start composing and sending e-emails from your controllers with just a few lines of code.

Using standalone Zend\View

Zend\View is pretty advanced rendering engine, with multiple useful features. It is working nicely within ZF2's MVC stack, where it is automatically configured for you. But how to use it without full MVC?

This can be useful in some situations: when building Your Own Microframework™, when creating an application based on ZF2 components, or (in my case) when working on module that is supposed to render something outside MVC flow. All of this projects can benefit from nested templates, multiple rendering engines, or pluggable architecture of Zend\View.

So, how to do that?

Learning ZF2: Application flow

Zend Framework 2

This post covers basic tasks that you may want to do within controller: forwarding to different actions, redirecting, and displaying 404 page. Once again, I will show how this tasks can be achieved in both ZF1 and ZF2.

Learning ZF2: The Controller

Zend Framework 2

When Zend Framework 2 was officially released, I wanted to learn it on practical example. So, I decided to use it as a foundation for my new blog engine. Because it is very simple application (just a few classes), I was able to build it pretty easily.

This is first post of short series where I will describe how common problems are solved in ZF2. I will always compare it with similar code written in ZF1-style.

First I'm going to describe some common tasks that you usually do in your controllers: handling input parameters and accessing application services.

PHP SDK for CodebaseHQ API

CodebaseHQ

When we started working on Cleeng, we decided to choose CodebaseHQ as our project management and code hosting service. At some point we realised that we could benefit from having a small tool that will automate common tasks like creating topic branches for tickets, marking them as "completed", and so on.

In order to build such tool, I had to create a foundation: small library that can connect to CodebaseHQ API, fetch list of tickets, and post updates. I released it to public - just in case anyone else needed it.

Project is hosted on Github: PHP SDK for CodebaseHQ API

Rzut okiem na Zend Framework 2: Event Manager

Logo ZF2

Zend Framework 2 zbliża się wielkimi krokami. Po okresie zastoju zdecydowano się przenieść główne repozytorium projektu na GitHub i bardziej otworzyć się na społeczność - nie trzeba juz podpisywać CLA przed dodaniem swoich łatek. Dzięki temu rozwój wyraźnie przyspieszył, a kod zaczyna się stabilizować.

Twig w praktyce

Wtyczka do NetBeans kolorująca składnię plików .twig

Jednym z powodów dla którego postanowiłem stworzyć tą stronę własnoręcznie (zamiast sięgnąć po gotowce typu WordPress), była chęć posiadania pewnego rodzaju "poligonu doświadczalnego". Pozwala mi to sprawdzać różne rozwiązania w praktyce, zanim będę mógł "sprzedać je" klientom. Po napisaniu artykułu o Twigu postanowiłem poświęcić trochę czasu i wdrorzyć go na tej stronie. Zadanie okazało się dosyć łatwe i pozwoliło mi zapoznać się z tą technologią.
W tym poście zebrałem kilka przykładów i porównań między szablonami w czystym PHP a Twigiem. 

Zend Framework i Twig - integracja

Wtyczka do NetBeans kolorująca składnię plików .twig

PHPpowe systemy szablonów są teraz na topie: są szybsze i znacznie potężniejsze od swoich pierwowzorów sprzed kilku lat. Może już czas odejść od widoków tworzonych w czystym PHP?

Nie chcę wylewać własnych przemyśleń na temat wad i zalet różnych "szablonowych" rozwiązań. Przedstawiam gotowy przepis, jak zmusić Zenda do współpracy z systemem Twig. Dlaczego Twig? Opiekunem projektu jest Fabien Potencier - współautor Symfony, postać, której w światku PHP nie trzeba nikomu przedstawiać. Nazwisko to gwarantuje otrzymanie przemyślanego, wygodnego w użyciu i dobrze przetestowanego kodu.

Wydajność Zend Framework - cz. 2

Niestety piszę ten artykuł dużo później niż chciałem. Przyczyną jest dosyć spory projekt nad którym pracowałem przez ostatnie dwa miesiące. Zlecenie było bardzo ciekawe, więc mam nadzieję że będę mógł wkrótce coś o nim napisać.
W tym czasie na pewnym blogu znalazłem rozwiązanie które wcześniej chciałem przedstawić (http://www.karolnowicki.pl/zend-framework/artykul/pokaz/zend-wolny-jak-zolw---niekoniecznie_-cz-1/). Ponieważ kolega mnie wyprzedził, nie widzę sensu powtarzać tutaj tego samego.
Zgadzam się z tym, że "powolność" Zenda jest spowodowana w dużej mierze ogromną liczbą plików które trzeba dołączyć przy każdym odświeżeniu strony. Liczba ta rośnie bardzo szybko z każdym kolejnym komponentem ZF którego użyjemy. Można to łatwo sprawdzić dodając na końcu pliku index.php polecenie typu echo count(get_included_files()). Oto kilka przykładów:

Pusta aplikacja utworzona poleceniem zf create project:
Użyta pamięć: 3328 kB
Dołączone pliki: 60


Dodajemy layout - (polecenie zf enable layout):
Użyta pamięć: 3584 kB
Dołączone pliki: 71


Teraz to samo z plus prosty formularz (składający się z jednego pola tekstowego i przycisku "wyślij"):
Użyta pamięć: 5376 kB
Dołączone pliki: 100


Wzrost jest bardzo wyraźny. Podam jeszcze wartości dla strony głównej mojego bloga:
Użyta pamięć: 17408 kB
Dołączone pliki: 268


Ogromne zużycie pamięci to głównie zasługa Doctrine, na szczęście można je zmniejszyć przy pomocy dowolnego akceleratora (APC, eaccelerator). Redukcja liczby plików jest możliwa np. dzięki metodzie zaprezentowanej w w/w artykule. Przedstawiony tam sposób jest ciekawy (mój był nieco bardziej prymitywny), jednak trzeba uważać i dobrze przetestować tak przygotowaną aplikację - mogą pojawić się dziwne błędy. Przykładowa klasa która lubi sprawiać problemy to Zend_Locale_Data - odwołuje się do plików po względnej ścieżce, a więc najprościej jest usunąć ją z merge'a.

To na razie tyle w temacie szybkości ZF.

PS. W ciągu tych dwóch miesięcy ze względu na brak czasu nie odpisałem też na kilka maili. Proszę, nie miejcie mi tego za złe i piszcie jeszcze raz :-)

Wydajność Zend Framework - cz. 1

Wiele osób sądzi że Zend Framework jest jednym z najmniej wydajnych rozwiązań tego typu.Tworząc aplikację bazującą na frameworku szybko zauważymy, że działa ona dużo wolniej niż odpowiednik napisany w czystym PHP. Czy powinniśmy się tym przejmować?
Im bardziej rozbudowany projekt, tym proporcjonalnie mniejszy narzut wynikający z zastosowania biblioteki. W większych aplikacjach problemem nie jest framework, lecz (najczęściej) baza danych.

Mimo tego, warto wiedzieć co ma wpływ na tak niską wydajność. A także to, że niewielkim kosztem można ją poprawić.
Dzisiejszy wpis to pierwsza część krótkiej serii artykułów o wydajności frameworku. Zaczniemy od podstaw - pokażę kilka sposobów na pomiar prędkości.