To content | To menu | To search

Monday 13 August 2007

Zend_Db_Table and tables relationships

When developping a database tied application, you eventually come to a point where you get (at least) two tables with a parent/child relationship, such as for example a User table referenced by, say, a Post table (each post belonging to a specific user). That's basically the point where you need Zend_Db_Table relationships mechanism. the drawback of this mechanism is that, as far as I know, it does not produce joined queries to retrieve the parent data, but fires a query for each parent row. Thus instead of just using Zend_Db Relationships, I developped a simple yet effective auto-join mechanism that I called, in great simplicity, parent mapping. It supports multiple joins from multiple tables, remote fields specification and prefixing.

It is included in my db table class and you can see the interesting part of the code below for your convenience (Ignore the 3 first lines of the function as it is used for something else in my version of the framework).

Continue reading...

Saturday 11 August 2007

Stripping the logic: the Transfer Object

Sometimes you have to pass an object data to another object, or to another layer of your application (who said controller/view ?), while ensuring that the receiving entity will not be able to run business code encapsulated in your class. In the Zend Framework, several objects provide a toArray method, but that is not always sufficient as sometimes you'd like to keep with the $object->varname syntax.

That is where the Transfer Object arrives. While the preceding definition is not exact (that's not the real purpose of the Transfert Object in the J2EE spirit), This is the most common use that PHP Developers can make of it nowadays I think. So I came up with a very light implementation of a concept which I hope can prove useful for any folks getting by there.

See also:

Tuesday 7 August 2007

Un mars et ça repart

Hop je reviens d'une petite (5 jours) semaine de vacances à Le Blanc, où j'ai pu enchainer quelques 6 sauts (en parachute) à 1200 et 1600 mètres d'altitude. C'était assez éprouvant mais bordel ça fait un bien fou.

Tuesday 31 July 2007

Zend Framework Pagination reloaded

UPDATE

A new version of this component is available.

I have a new version of my pagination component which solve the issue previously pointed out by Guy. This update comes along with a subclassed version of Zend_Db_Table which allows counting and specific columns selection respectively via the fetchCount() and fetchCols() methods. Btw, the fetchCols() method is very hackish at the moment, and I'll certainly end up with rewriting it using a plain Zend_Db_Select statement.

As always, any comment is appreciated. I'm thinking of subclassing the Rowset class to fill it with pagination info getters like getPageCount(), getNextPage(), etc, like in Symfony for those knowing, instead of relying on a getPaginationInfo() method. Future improvements will also include more view helper magic.

Also, I came up with a small new Riskle_Pattern namespace which I use to implement commonly used patterns, such as the Proxy Pattern. I'm not yet sure of the pertinence of this thing, so any comments are yet again very much appreciated on this topic :-)

Sunday 29 July 2007

Gimme the cube !

Ce matin, après les affres d'un réveil laborieux et d'un petit-déjeuner agréable au starbuck, j'ai eu le plaisir de faire profiter à mes yeux de pas loin de trois heures d'extravagances à l'américaine sur fond d\'Autobots et de Decepticons. Vous l'aurez compris, je parle bien évidemment du dernier né des studios hollywoodiens, le blockbuster qui concurrence Die Hard 4, la réminiscence de notre plus tendre jeunesse, je parle de Transformers.

Que dire ? J'avais oublié la teneur exacte du background de cette série, et franchement, même si c'en est touchant de naïveté, le prétexte n'est pas pire que celui de pas mal des bons films d'actions sortis ces derniers temps (je pense là encore à Die Hard, mais aussi à Spiderman (attention, je parle de la base du scénario du/des film(s), pas du background) par exemple). En gros donc, le scénario est bidon, ne nous leurrons pas, mais franchement, si on va voir Transformers: le film pour son scénario, c'est qu'on à rien compris. La débauche d'effets spéciaux est tellement ahurissante qu'il serait dommage d'en rater une miette à cause d'un scénario qu'on s'efforcerait de suivre. Dès le début du film on plonge en plein coeur du sujet, avec une entrée en matière plus que remarquable, suivie peu après d'une scène qui restera longtemps gravée dans ma mémoire cinématographique je pense (je fais allusion à la bataille contre le scorpion) de part son caractère absolument hum... comment dire ? mes instincts de petit garçon mâle jouant au Gi Joe se sont subitement réveillés dirons nous :-)

Le reste du film se déroule sans surprise, les scènes d'actions s'enchainent et ne se ressemblent pas, entrecoupées de fragments d'intrigues pour se reposer un peu les mirettes. Bref, bien que le film tire un peu en longueur sur la fin, vous aurez compris que je suis totalement conquis par cette production et que je la recommande à tout le monde modulo deux conditions: 1) le voir au cinéma (ça en jette mieux je pense) et 2) avoir bien ciblé ce qu'on va voir (pas trop dur après le court exposé que je viens de vous faire).

Saturday 28 July 2007

Le tourisme expérimental

Vu que je me fais un peu chier en ce moment, je pense de plus en plus a partir un peu à l'aventure, voyager, toussa. En farfouillant un peu sur le net, j'ai découvert le tourisme expérimental qui propose des règles d'organisation de voyage souvent rigolotes, et toujours originales. Je ne pouvais donc décemment pas ne pas vous faire partager cette découverte qui va conditionner je pense une bonne partie de mes prochaines vacances a venir.

D'ailleurs, tant que j'y suis, je cherche un ou des compères susceptibles de m'accompagner dans des expéditions de plus ou moins une semaine a faible ou moyen budget et pas trop organisées dans des pays comme la suède, le royaume uni (angleterre / écosse / irlande), la hollande, le danemark, et généralement les pays scandinaves et anglo-saxons. Partir avec quelqu'un(s) que je ne connais pas ou peu fait parti du trip (jeu de mot ahah), donc n'hésitez pas à me contacter (à geoffrey+trip@zubrowka.org) si ça vous tente.

Thursday 19 July 2007

Searching the Zend Framework's manual: Google Co-op to the rescue

While the Zend Framework's manual is somewhat quite good, it lacks a feature that make it a really good manual: search. I find it very frustrating to not be able to make a simple search and therefor having to browse through the extensive TOC to find what I'm actually looking for. Here enters the very handy Google co-op service which allows creation of custom search engines based on Google's indexes. It do not takes more than five minutes to setup a simple search engine, thus providing search capability to the manual :-)

And as a good news never comes alone, I also made the OpenSearch plugin for it.

UPDATE

I made a simpler url to remind of: http://zend.riskle.com/search/ and updated the opensearch thing to use that url.

Sunday 15 July 2007

Pagination with the Zend Framework

Yesterday I came up with a small pagination component for the Zend Frameworks. It implements the Proxy pattern around a Zend_Db_Table object, and overloads the fetchAll method. The main problem I encountered here was to retrieve the total number of rows for the table. I'm using a Zend_Db_Select query for now, but I'll have to improve that. The component also features a view helper to draw the pagination links.

You'll find the code for the component and the view helper on my SVN.

And here is how it is used in the controller:

    public function indexAction() {
        $urls = new Riskle_Db_Table_Paginate(new Urls, $this->_getParam('page'));
        $this->view->urlsList = $urls->fetchAll(null, 'datetime DESC');
        $this->view->paginationInfos = $urls->getPaginationInfos();
    }

The view helper takes paginationInfos as an argument:

echo $this->paginate($this->paginationInfos);

UPDATE

As pointed out by Guy, the _getPageCount method does not actually takes care of the $where condition, thus rendering the class inefficient as getting the real totel number of items. This issue will be adressed in an upcoming version of the class :-)

UPDATE

There's an updated version of this component available.

Saturday 14 July 2007

A Zend controller plugin to enable RESTful behaviour

This is a simple controller plugin for the Zend Framework which enable RESTful behaviour. It basically adds the HTTP method name to the action name, so that the URL http://example.com/foo/bar will be dispatched to FooController::barGetAction on a GET, FooController::barPostAction on a POST, etc.

Continue reading...

Sunday 1 July 2007

Get the current $view from a view helper

So you're making your own view helper and you need, for a reason, to access the running $view instance. Don't worry, all you have to do is implement a setView() method which will be called on your helper's instantiation, with the $view as argument:

class My_View_Helper_SpecialPurpose {
	
	protected $_view = null;
	
	public function setView($view) {
		$this->_view = $view;
	}

}

And voila !

Saturday 30 June 2007

Mon nouveau keupin Diboug

Hier j'ai acheté un nabaztag/tag hier, il s'appelle Diboug, et vu qu'il existe une API a peu près potable pour le programmer, je prédis tout un tas de fun dans les jours qui viennent :-)

Wednesday 27 June 2007

No comment

C'est pas vraiment dans mon habitude, mais là on m'a lancé un défi, alors s'il vous plait, un ptit clic ?

Monday 25 June 2007

Zend Framework 1.0.0 RC3

Allez hop, la RC3 du Zend Framework est sortie (il y a 2 jours).

J'en profite pour faire un peu de pub pour zftalk, un chan IRC sympa.

Friday 22 June 2007

Technobabble

J'ai fait un thème dc2 vite fait basé sur le template Technobabble de dreamLogic trouvé sur oswd. C'est spartiate comme on dit.

Sunday 17 June 2007

4 trucs

Puisqu'on m'a lancé la patate et que l'activité de ce blog et tout sauf débordante en ce moment, je m'y colle.

Quatre emplois que j’ai tenus dans ma vie

  • Développeur
  • Manutentionnaire

Quatre films que je regarderais encore et encore

Quatre endroits où j’ai vécu

  • Coutances (50)
  • Saint Brévin (44)
  • Savennières (49)
  • Courbevoie (92)

Quatre émissions/séries TV que je regarde

  • Les Simpsons
  • South Park
  • NCIS
  • Moult séries en divx

Quatre lieux où je suis déjà allé en vacances

  • Biaritz
  • Batz sur mer
  • Chez ma mère
  • Les vacances c'est pas vraiment mon fort vous savez.

Quatre trucs que je check à chaque fois que je vais sur le Net

  • Mon aggrégateur RSS (Google Reader)
  • IRC (over screen over ssh)
  • Mes mails
  • Popomundo

Quatre mets que je ne mangerais pour rien au monde

  • Des moules
  • Des huîtres
  • heu ?

Quatre mets/plats favoris

  • La texmex au pizzaoïolo de mon quartier
  • Sashimis
  • La poule au pot
  • L'entrecôte XL

Quatre endroits où j’aimerais être en ce moment

  • E.F.P. Le Blanc, altitude 1200m
  • En Suède
  • Chez moi (ça tombe bien j'y suis)
  • Sous la douche (ça tombe bien j'y vais)

C'était vraiment très interressant.

Wednesday 13 June 2007

Zend Framework 1.0.0 RC2

Au fait, j'ai mis en ligne le package pear de la 1.0 RC2 du Zend Framework hier, avec un peu de retard donc, puisque j'étais occupé à imiter les oiseaux :)

Monday 11 June 2007

Je suis vivant.

Non, ce n'est pas le traditionnel billet de remise en vie du blog, cette fois, je suis bel et bien vivant, après mes 2 sauts en parachute de ce week end :D Le truc le plus "ouf" qu'on puisse faire dans sa vie. Vivement les prochains sauts !

Thursday 7 June 2007

Deux choses

  1. Nantes / Poitiers en train c'est la galère ultime
  2. http://www.librarything.com/catalog...

Bon par contre, mon librarything est (très) loin d'être complet. J'ai fini tout a l'heure dans le train La Horde du Contrevent, et franchement, il vaut bien les 5 étoiles que je lui ai mis.

Thursday 31 May 2007

Google Gears

La dernière petite roxitude de google: Google Gears, une extension firefox qui embarque une base SQLite pour faciliter le développement d'applications offline.

on en parle , et puis aussi .

Tuesday 29 May 2007

Google Reader + Wii

Google Reader dispose d'une interface dédiée à la wii (sur laquelle on tombe automatiquement quand on s'y rend avec opera4wii) et optimisé pour la wiimote.

via

- page 4 of 37 -