All posts by stoimen

Zend Framework – quick tutorial (part 1)

Introduction

I’ve decided to write a quick tutorial about the way I work with Zend Framework. The problems I have, and the way I get through their solution. I think it will be useful for anyone common with the OOP design patterns and PHP programming, who wants to start with Zend Framework.

Introduction

In my practice as programmer I’ve noticed, that almost 90% of the sites we’ve build, have the same problems to solve and similar milestones.

At first why we need a framework? Because most of the programmers start from the beginning with the design of abstraction layers, and the time for the design is absolutely wasted when there are already that kind of abstraction given from almost every framework. Many of them have a big community of programmers around and cover a large scale of programming issues.

The obvious conclusion here is that there are not much sense in loosing that time. In the other part learning and using a framework with the scale of Zend Framework also requires a lot of time, but there’s no need of learning every part of it before you really start. That can happen later on.

That’s what happened in my case. Before two years I’ve designed and build my own framework, which does a lot of good work to organize the working process in the company I worked than. Than I start using a content management systems (CMS), mainly Joomla!, but recently noticed, that our clients don’t need that many functionality as Joomla! offers. They did not create a “menu” or add “template”.

With the idea to create web systems with my own CMS I decided to use Zend Framework. Not just like that, but mostely because the other PHP frameworks like CakePHP or Symfony looked to me more like CMS, something that I don’t want, because I’d like to build my own steping on the base of framework which gives those abstraction layers like db connection, acl etc.

With this tutorial I’ll describe the path I passed trough using the Zend Framework, and how it can be basicaly used.

part 2 – directory layout and bootstrapping

Zend_Layout

Или как да не пишем във всеки шаблон, че ще има header.

Всеки, който започва да използва нов web framework първоначално се запитва за няколко основни неща. Като цяло те и отговарят на MVC практиката.

  1. Как да направим така че всичките ни състояния в сайта да бъдат описани в различни файлове, така че да можем лесно да си намираме и поддържаме кода.
  2. Как да се погрижим за правата и ролите на различните потребители на сайта.
  3. Как да разделим html-а на няколко файла, за да не пишем по един милион пъти includes на header или footer.

Почти всеки, който се е сблъсквал с PHP програмиране е чувал за Smarty и когато някой, по-често псевдо разбирач, ти изреди една плеяда колко е ретроградно да се слага php код измежду html таговете и как трябвало Smarty да се притече на помощ, ето един добър довод за излагане против Smarty.

Хубаво е да се ползва Smarty. Няма проблем. Само че нека си представим следния пример. Имаме сайт с header – content – footer. Като обикновено header-a съдържа разни връзки към css и meta тагове. Със Smarty като искаме да използваме тая структура за 10 файла, 10 пъти ще имаме следния код:

{include file=”header.tpl”}

{include file=”content.tpl”}

{include file=”footer.tpl”}

и ако това се повтаря в 100 файла, ще се наложи, няма как – 100 пъти едно и също за тоя header и footer.

След като и Zend Framework се е измъчил в по-предишни версии, доколкото разбирам, все пак аз отскоро се захванах с него и направо започнах от 1.5.3, сега проблемът се решава от Zend_Layout. A и сблъсквайки се с проблема с header-a и footer-a стигнаь до четене на няколко урока, от които разбрах, че хората преди са се опитвали да решат проблема с plugin към Front Controller-а и явно това е било разпространената практика.

Може би и на създателите на ZF им е станало ясно, че така няма да стане и затова се е погрижил Zend_Layout.

Дори сега се появяват уроци които се стремят да помогнат на решаването на този проблем с помощта на plugin, но аз препоръчвам да не се захваща никой с тях, въпреки че може на някой да му е интересно. Най-добре да се насочи към използването на Zend_Layout. За жалост пък при него поне официалната документация ми се видя недостатъчно, но пък намерих една презентация от webinar на Zend.

Zend_Controller_Front plugins

Една от особеностите на Zend Framework Front Controller е фактът, че може лесно да се напишат и ползват plugins към него. Колкото до официалната документация на ZF, поне според мен, не е достатъчно описателна и не дава ясна представа какво точно правят тези plugins и колкото и добре да е показано как се пишат и как са замислени не става известно какво предимство дават на приложението.

Добра статия за това как да се напише plugin и какви предимства дава може да се намери в една статия, която намерих днес.

Ето и някои от предимствата на плъгините:

  1. Инициализация на приложението
  2. Кеширане
  3. Инициализация на router-а
  4. Authentication и Authorization
  5. Филтриране на изходния XHTML