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

L’aide de vue headTitle() du framework Zend

L’aide de vue headTitle() permet de placer dynamiquement la balise title du document. Voici une de ses utilisations classiques, on ajoute une méthode _initTitle() au bootstrap :

public function _initTitle()
{
    $view = $this->bootstrap('view')->getResource('view');
    $view->headTitle('Mon site');
    $view->headTitle()->setSeparator(' / ');
}

Le titre est mis à « Mon site » et un séparateur est ajouté. Puis dans la méthode init() du contrôleur on ajoute « Mon contrôleur » grace à la méthode append() :

public function init()
{
	$this->view->headTitle()->append('Mon contrôleur');
}

On peut pousser le bouchon plus loin en ajoutant la partie de l’action :

public function indexAction()
{
	$this->view->headTitle()->append('Mon action');
}

Ce qui donne :

Mon site / Mon contrôleur / Mon action

Elément de formulaire à la volée avec Zend Framework

Dans ce tutoriel nous allons voir comment gérer l’ajout d’un élément de formulaire à la volée, à savoir en utilisant Ajax/jQuery dans un projet Zend Framework. En PHP vanilla, c’est plutôt simple, mais avec ZF, cela se complique un peu.

Le tutoriel pré-suppose avoir les connaissances de base de ZF, si vous débutez, je vous conseille de lire le billet relatif à la mise en place d’un premier projet ZF.

Continuer la lecture de « Elément de formulaire à la volée avec Zend Framework »

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();