Problème Zend_Session avec Google Chrome

J’ai rencontré un étrange problème avec les sessions du framework Zend et Google Chrome uniquement. Celles-ci ne sont tout simplement pas enregistrées. C’est un réel problème surtout avec l’utilisation de Zend_Auth car aussitôt que l’utilisateur passe le formulaire de login, celui-ci se retrouve déconnecté.

Le problème est beaucoup mentionné sur le web, avec des solutions dans tous les sens, dont une qui semble farfelue mais qui a résolu ce problème pour mes applications : ajouter une favicon.ico à la racine du site.

heard like a missing favicon.ico. chrome makes a new thread for requesting the favicon.ico. so if you handle 404 requests in a way with updating a session-cookie you will get a new session-id and your visible browser tab session has an other session than the « favicon » request! check your serverlogs and 404 handling.

Source : ZF Issue tracker

Zend : Utiliser UNION dans une requête

Petit mémo directement prit de la documentation officielle du framework Zend pour combiner les résultats de deux requêtes en utilisant UNION avec Zend_Db_Select :

$sql1 = $db->select();
$sql2 = "SELECT ...";

$select = $db->select()
	->union(array($sql1, $sql2))
	->order("id");

Pour un UNION ALL, il suffit de passer la constante Zend_Db_Select::SQL_UNION_ALL en second paramètre :

$select = $db->select()
	->union(array($sql1, $sql2), Zend_Db_Select::SQL_UNION_ALL)
	->order("id");

Et en passant, pour aider à débugguer un peu les requêtes Zend_Db_Select, il est possible d’utiliser la méthode __toString() pour afficher la requête exécutée. En exemple, il suffit d’ajouter ceci en fin du code ci-dessus :

echo $select->__toString();

Zend : Ajouter une valeur NULL dans une requête

Pour ajouter une valeur NULL dans une requête SQL avec le framework Zend, il faut instantier un objet Zend_Db_Expr en lui passant NULL en paramètre. Dans la pratique et comme exemple, je voulais faire ceci :

$sql = $db->select()
	->from(
		array('goo' => 'goods'),
		array(
			'group' => NULL,
			'supplier',
			'quantity',
			// Le code continue....

la colonne group à la ligne 5 est ici ignorée, car il faut précéder ainsi :

$sql = $db->select()
	->from(
		array('goo' => 'goods'),
		array(
			'group' => new Zend_Db_Expr('NULL'),
			'supplier',
			'quantity',
			// Le code continue....

Le Front Controller Plugin avec Zend

Dans le précédent article de la rubrique Zend, nous avons parlé des plugins ou bibliothèques perso, dans celui-ci nous allons voir comment utiliser des plugins de Front Controller.

Un plugin de Front controller est un type de plugin qui permet d’effectuer certaines tâches à des moments clés du cycle MVC. Par exemple il est possible de faire des connexions à des bases de données suivant l’action demandée, vérifier l’authentification de l’utilisateur, ou adapter la langue avant que quoi que ce soit ne soit afficher à l’écran.

Continue reading « Le Front Controller Plugin avec Zend »