Mise en production de Zend Framework sur un serveur mutualisé

Zend 7 Commentaires »

Zend Framework LogoLorsque l’on dispose d’un serveur dédié, la mise en production d’une application Zend Framework est assez simple; il suffit de modifier le DocumentRoot du VirtualHost.

Si l’on dispose d’un hébergement mutualisé, il faut aussi pouvoir proposer à nos visiteurs un accès au site via www.domain.tld et non pas www.domain.tld/public/

Première solution

La première solution, consiste à déplacer le fichier /public/index.php à la racine du domaine et de modifier la définition de la constante APPLICATION_PATH de ce même fichier.
Le seul soucis de cette solution, c’est que les appels aux ressources de type CSS ou JS devront être modifiés pour pointer vers www.domain.tld/public/
Personnellement, je trouve cela complètement nul…

Deuxième solution

La deuxième solution – bien plus élégante – passe par l’ajout d’un .htaccess à la racine du domaine.

RewriteEngine On
# Only apply to URLs on this domain
RewriteCond %{HTTP_HOST} ^(www.)?domain.tld$
 
# Only apply to URLs that aren't already under folder.
RewriteCond %{REQUEST_URI} !^/public/
 
# Don't apply to URLs that go to existing files or folders.
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
# Rewrite all those to insert /folder.
RewriteRule ^(.*)$ /public/$1
 
# Also redirect the root folder.
RewriteCond %{HTTP_HOST} ^(www.)?domain.tld$
RewriteRule ^(/)?$ public/index.php [L]

Là, tout est magique et fonctionne sans aucune autre modification de l’application.
Pour protéger l’accès à vos autres répertoires, et principalement /application qui contient surement vos mots de passe BDD non chiffrés. Rajouter un fichier .htaccess contenant

deny from all
Mots-clefs :, , , , , , , ,
 

Transfer Object Assembler avec Doctrine 1

Doctrine, Zend 1 Commentaire »

doctrineLe pattern Transfert Object TO, Data Transfert Object DTO, ou encore Value Object VO permet d’échanger des données entre deux applications.

Wikipédia : Son but est de simplifier les transferts de données entre les sous-systèmes d’une application logiciel. Les objets de transfert de données sont souvent utilisés en conjonction des objets d’accès aux données.

Qui dit Transfert Object, veux aussi dire Transfert Object Assembler.

Conversion d’object

Le pattern Transfert Object Assembler permet de passer d’un DTO à un Objet d’accès au données, et inversement.
C’est le moyen le plus simple pour travailler avec le pattern Data Transert Object et un ORM.

Domain Object Model -> Data Transfert Object

Avec l’ORM Doctrine, le transfert d’un « Domain Object Model DOM » ou ici Doctrine_Record vers un DTO est très simple.
Il suffit de réaliser un parser qui analyse l’objet issu de Doctrine, et qui remplit les données du DTO.

Data Transfert Object -> Domain Object Model

Convertir un DTO vers un DOM peut s’avère plus complexe.
En effet, Doctrine utilise des collections d’objet qui lui sont propres, mais a aussi besoin de connaitre les clés primaires et leurs contenus pour pouvoir créer un objet. Car un objet issu de Doctrine_Record n’a pas les même propriétés quand il est existant en base de donnée, ou qu’il est en phase d’être sauvegardé.

Implémentation de Transfer Object Assembler

Une implémentation du pattern Transfert Object Assembler vient de voir le jour après moult et moult péripéties.

Cette implémentation permet donc le transférer de DTOs à partir de DOMs et inversement.
Associer au pattern Service Layer, cela peut s’avérer être très pratique.

Voici un exemple simple d’utilisation :

$oProgram = new ProgramDTO ();
$oProgram->title = "Dorothe";
 
$oVideoDTO = new VideoDTO ();
$oVideoDTO->idVideo = 30;
$oVideoDTO->program = $oProgram;
 
$oAssembler = $new Assembler ();
$oVideo = $oAssembler->createDomainObject ($oVideoDTO);
$oVideo->save ();

Nous avons ici créé une nouvelle entrée dans la table programs, et réalisé une liaison entre ce nouvel objet et la vidéo existante d’identifiant 30.
Le tout one-shot !

L’intérêt de cette implémentation, c’est d’être fonctionnel avec :

  • Les objets persistant
  • Les objets non-persistant
  • Les compositions d’objets sur N niveau

Utilisation avec le pattern Service Layer

Nous allons voir l’exemple le plus simple, soit l’implémentation des méthodes CRUD pour un objet générique.
L’utilisation du nommage des classes provient de l’utilisation de Zend Framework.

/**
 * @param Model_DTO_Video
 * @return Model_DTO_Video
 */
public function create (Model_DTO_Video $poVideoDTO)
{
	$oModelVideo		= null;
	$oAssembler		= new Model_Utils_Assembler ();
	$oModelVideo		= $oAssembler->createDomainObject($poVideoDTO, true);
	$oModelVideo->save ();
	$poVideoDTO->idShow	= $oModelVideo->idShow;
	return $poVideoDTO;
}
 
/**
 * @param Model_DTO_Video
 * @return Model_DTO_Video
 */
public function read (Model_DTO_Video $poVideoDTO)
{
	$query	= Doctrine_Query::create ()
		->select ("video.*")
		->from ("Model_Video video")
		->where ("video.id_show = ?", $piIdVideo);
	$oModelVideo	= $query->fetchOne ();
	$oAssembler	= new Model_Utils_Assembler ();
	return $oAssembler->createTransfertObject ($oModelVideo);
}
 
/**
 * @param Model_DTO_Video
 * @return Model_DTO_Video
 */
public function update (Model_DTO_Video $poVideoDTO)
{
	$oModelVideo	= null;
	$oAssembler	= new Model_Utils_Assembler ();
	$oModelVideo	= $oAssembler->createDomainObject($poVideoDTO, true);
	$oModelVideo->save ();
 
	return $poVideoDTO;
}
 
/**
 * @param Model_DTO_Video
 * @return Model_DTO_Video
 */
public function delete (Model_DTO_Video $poVideoDTO)
{
	$oModelVideo	= null;
	$oAssembler	= new Model_Utils_Assembler ();
	$oModelVideo	= $oAssembler->createDomainObject($poVideoDTO, false);
	$oModelVideo->delete ();
 
	return $poVideoDTO;
}

Téléchargement

Contenu de l’archive :

  • Implémentation du pattern Transfer Object Assembler
  • Interface du pattern Transfer Object Assembler
  • Classe de définition d’un DTO

Pour faire fonctionner l’assembler. Vous devez définir une classe qui hérite de Assembler, et ainsi surchargez la propriété $_relationships avec vos liaisons entre DTO et DOM.

Dernière mise à jour : 22 Juillet 2010
Transfert_Object_Assembler_Doctrine_1.1.zip – 3 Ko.

Mots-clefs :, , , , , , , ,
 

Deux Slide show Javascript

Javascript 3 Commentaires »

Scrollable et Horinaja: deux scripts permettant de réaliser un slide show sur du contenu HTML en Javascript.
Cela est pratique pour faire défiler des images, ou des blocs contenus dans des div.

Scrollable

Scrollable est un tools de la suite Flowplayer. Il est rapide à mettre en place et utilise JQuery. La documentation est suffisamment fournit pour utiliser correctement le script.
Les options de configuration sont assez nombreuses.

Horinaja

HorinajaHorinaja utilise JQuery ou scriptaculous, ce sera à vous de choisir la version que vous souhaitez.
La documentation semble plus petite, mais est-ce un tord ? A vous de jugez car je n’ai pas encore utilisé cette solution.

PS: Entre Slide show, scroll et défilement j’ai eu beaucoup de mal à faire mon choix. Vous avez un mot plus adapté ?
PS2: Si vous avez d’autres solutions à proposées, n’hésiter pas à me le faire savoir.

Mots-clefs :, , , , , , , ,
 

PureMVC et Objective-C : Mission iPhone

Objective-C 2 Commentaires »

Nous parlions de PureMVC dans le précédent article – Reflex : Architecture MVC – et bien le revoici pour vous annoncer que PureMVC à été porté pour Objective-C qui est le langage de développement de l’iPhone.

Cela nous amène à constater l’intérêt de PureMVC face à ces concurrents, car CairnGorm est une ligne de conduite utilisable avec Flex uniquement, car Reflex est une micro-architecture Flex facile à apprendre, car Vegas est un très gros et très riche framework ActionScript 1, 2 et 3.
Là où PureMVC sort son épingle du jeu, c’est sur sa portabilité, citons :

  • AS 2 : Flex 1.5, Flash 8, FlashLite
  • AS 3 : Flex 2, 3, Flash 9/CS3, AIR
  • C# : .NET 1.0/2.0 Silverlight, Windows Mobile and Pocket PC
  • ColdFusion
  • haXe : JavaScript, Flash 8, Flash 9 and the Neko VM
  • Java : Java Mobile, Standard and Enterprise Editions (ME, SE, EE), JavaFX, Servlets, Applets, GWT
    JavaScript
  • PHP : Version 5 & 6
  • Python : Python 2.5 for wxPython and Google App Engine
  • Objective-C : iPhone

N’ayant pas d’iPhone – et ne projetant pas d’en acheter un – je ne pourrai pas faire de teste, mais si cela intéresse quelqu’un, il pourra nous faire son feedback ;)

A vos claviers ;)

Mots-clefs :, , , ,
 

Reflex : Architecture MVC

Flex 7 Commentaires »

Fabien de la Fabrick a publié une « micro-architecture » MVC pour Flex.
Ces mots de présentation sont :

Souvent dans le monde de Flex, les équipes ne sont pas forcement homogènes. Certains sont habitués à la rigueur de Java, d’autres sont plus “devsigners freestyle” venant du monde Flash. Les premiers aiment les grosses mécaniques comme PureMVC, ou Prana Framework “Spring like”. Les seconds connaissent au mieux Cairngorm, au pire confondent MVC et VMC – ce qui n’a rien a voir, sauf si vous faites une application riche sur le thème de la ventilation.

Pour l’instant deux didacticiels sont disponibles : Introduction et Exemple et l’utilisation de l’IOC où il faut comprendre « Injection Of Content » plutôt que « Inversion Of Control« .

Ceci est un article orienté publicité d’une part, mais aussi « déploiement ». Toute personne recherchant un framework MVC tombera sur PureMVC ou Cairngorm, et bien maintenant, il y aura aussi ReFlex qui entrera dans la liste.

Si vous utilisez ReFlex, n’hésitez pas à faire des retours à l’auteur.

Edit : Oubli de ma part, gros framework incluant le pattern MVC : Vegas développé par eKameleon. D’ailleurs Vega n’inclue pas uniquement le pattern MVC, mais aussi beaucoup d’autres choses, il peut avoir l’air très difficile à appréhender. Mais comme toute nouvelle découverte, cela demande de l’investissement. Mais rassurez-vous, c’est un framework très riche en documentation.

A vous de faire votre choix ;)

Mots-clefs :, , , , , , , , ,
 
Designed by NattyWP Wordpress Themes.
Images by desEXign.