Posts Tagged ‘symfony’

The sfValidatorPropelUnique in symfony

Nov
17

Today, I wanted to do a signup form but I wanted distinct email addresses to be recorded. After some googlisations, I’ve spotted two problems.

As my field was an email address I thought something like “damn easy, I just have to use something like this: ”

$this->validatorSchema['email_1'] = new sfValidatorAnd(array(
  1.     new sfValidatorEmail(); ,
  2.     new sfValidatorPropelUnique(array(
  3.             'model' => $this->getModelName(),
  4.             'column' => 'email_1'
  5.          ),
  6.          array(
  7.              'invalid' => 'This email address is already assigned to an account.',
  8.          )
  9.     )
  10. ));

Though, after few tries I had an error that I’ve never seen before, saying that it has to be used as a postValidator. Before I understood how to deal with that, I’ve figured out something: I should simply add in my schema

  1. index: unique

in my email field… Damn… But since I’m definitly 2 cool, here is the correct syntax to use in your UserForm.class.php (basically, it shouldn’t be used if you defined correctly your schema.yml though!) :

$this->validatorSchema->setPostValidator(
  1.             new sfValidatorPropelUnique(array(
  2.                 'model' => 'User',
  3.                 'column' => array('email_1')
  4.             ),
  5.             array(
  6.                 'invalid' => 'An account is already registered with this email address.',
  7.             )
  8.         ));

Once again, thanks symfony to allow us escaping from so much troubles !

Running numerous symfony versions using MAMP on Mac OS X

Sep
26

I was basically going to simply translate the symfony multi install tutorial I wrote ages ago but I realised, now that I have more knowledge, that this way wasn’t improved at all. So here is a quickest and cleaner way to run multiple symfony versions on a Mac using MAMP.
Read more »

Put your CSS, Javascripts and pictures files into subdomains using symfony

Jul
27

A quick post concerning a problem I got when I started to move this blog to a symfony application. By the way, there’s still no release date planned yet considering the time I have for it. But let’s go back to this problem.
Read more »

Propel: jointure avec plusieurs conditions

Feb
28

J’ai été très récemment confronté à un problème avec Propel au moment de faire une jointure: il me fallait faire la jointure sur 2 champs. Aussi, le fait d’être tombé sur une demande similaire il y’a quelques heures sur le Google Groupe symfony-fr m’a poussé à poster directement une solution ici.

Voici le cas qui nous servira d’exemple en SQL:

  1. SELECT * FROM user LEFT JOIN diplome ON (user.id_diplome = diplome.id_diplome AND user.version_diplome = diplome.version_diplome)

Comme vous pouvez le constater, rien de bien méchant en SQL. Toutefois, lorsqu’il s’agit de “convertir” cette requête en Propel, la tâche devient plus ardue puisque après avoir fait un tour sur le site officiel de Propel, ce cas ne semble pas être géré jusqu’à la version 1.3 incluse. Espérons que celà sera corrigé dans la 1.4.

Mais comme je suis (encore) un mec sympa, voici une petite technique pour arriver à ses fins:

  1. $c = new Criteria();
  2. $c->addJoin(DiplomePeer::ID_DIPLOME, UserPeer::ID_DIPLOME . ' AND ' . DiplomePeer::VERSION_DIPLOME . ' = ' . UserPeer::VERSION_DIPLOME, Criteria::LEFT_JOIN);
  3. $users = UserPeer::doSelect($c);

Voilà de quoi éviter de se cogner la tête contre les murs !

Création d'un plugin Flickr pour symfony

Feb
18

Comme si je ne m’impliquais pas dans suffisament de projets, j’étais en train de refaire, secrètement, mon blog avec symfony. Comme vous l’avez constaté très récemment, je me suis mis à Flickr et j’ai donc cherché à, vous vous en doutez, mettre en place une fonctionnalité à la fois puissante et surtout, très souple qui me permettrait de gérer totalement mes galleries directement depuis mon application symfony. Non, je n’accroche toujours pas vraiment avec l’interface du site, même si je dois reconnaitre que l’utilitaire permettant de gérer le traitement par lots est relativement bien conçu et puissant. De plus, un autre projet encore tenu secret (dont le brouillon de l’article à ce propos commence sérieusement à prendre la poussière) me fait aimer de moins en moins cette notion de toujours-plus-de-comptes-utilisateur. Certains d’entre-vous auront déjà deviné ce sur quoi porte ce “projet secret”… :)

Mais revenons à Flick. Tout naturellement, je me suis rendu sur le moteur de recherche de plugins pour symfony afin de voir ce qui existait déjà puisque j’ai toujours adhéré (un peut trop peut-être?) à l’idée de ne pas réinventer la roue! Je n’ai pu en trouver qu’un ne répondant pas à mes besoins et mes attentes bien spécifiques. J’ai donc lancé des recherches hasardeuses sur le sujet et je suis tombé sur phpFlickr. Et phpFlickr, bein… c’est vachement bien!

phpFlickr c’est une classe reprennant toutes les méthodes de l’API originale en version… php! Et avec ça, on fait (ou on peut faire, tout au moins) des miracles. Je me suis donc lancé dans le portage sous symfony et après plusieurs heures je me suis dit: pourquoi ne pas le proposer en tant que plugin?! J’en ai bien évidemment parlé à mon patron au cas où ça pourrait intéresser la société et il a tout de suite été séduit, tout en acceptant mes conditions (puisqu’à la base, il s’agit d’un projet personnel) à savoir, le rendre disponible pour la communauté.

N’ayant pas encore fait de recherche concernant la soumission de plugins puisque, je l’imagine, celà doit se faire sous certaines conditions, n’hésitez pas à me faire part de vos connaissances en la matière! Bein oui, la priorité est bien évidemment le développement dans l’immédiat!

Corrections et ajouts sur le blog

Feb
8

Aujourd’hui j’ai effectué quelques petits travaux d’améliorations sur le blog pour plusieurs raisons:

  1. Voilà bien longtemps que le système de gestion des liens ne me plaisait pas puisque n’affichant pas les catégories. Voilà qui est corrigé pour, au moins, mon plus grand bonheur et j’espère le votre!
  2. Toujours dans la partie lien, la description n’apparaissait pas ce qui ne donne pas envie de cliquer pour essayer, moi le premier!
  3. Ajout de liens vers mon profil sur différents réseaux sociaux (Facebook, Viadeo, LinkedIn, Flickr et Twitter) qui étaient, pour la plupart, plus ou moins lachés dans la nature!
  4. J’ai eu la grande surprise la semaine dernière de m’apercevoir que je figurais en première page sur Google pour la recherche développeur symfony! Ca en jete un max! :D

Ce dernier point m’a emmené tout logiquement à optimiser un peu plus le référencement naturel de ce blog et, pour m’y tenir, j’en ai profité pour me fixer un objectif bien précis: arriver à, dans un premier temps, rentrer dans le top 3 avant d’en prendre la tête :D Actuellement les 3 premiers résultats sont trustés par Xavier Lacot, responsable du pôle développement PHP (si je me souviens bien de l’appelation exacte) chez Clever Age que j’avais eu l’occasion de rencontrer lors d’un entretien fin septembre dans leurs bureaux Parisiens (puisqu’ils ont en effet également une agence à Bordeaux entre autre) et avec qui ça s’était extrêment bien passé! Je ne vais pas faire l’éloge de cette société, les gens que j’ai pu y rencontrer savent très bien ce que j’en pense :) Tout ça pour dire que je n’ai pas vraiment de réel intérêt à passer en tête, juste m’amuser un peu avec le référencement!

Dans un autre (nom de) domaine, je vais essayer de mettre en place avec MoAdiB un système pour relayer certains de mes posts sur lepetitmonde.net, blog ou j’écrivais (plus ou moins…) il y’a encore quelques mois. Il s’agira surtout des billets techniques plutôt que la totalité pour garder un minimum de contrôle sur les articles beaucoup plus personnels.

Concernant le petit monde, à l’heure où j’écris ces lignes, MoAdiB met en place un nouveau thème qui nécessite un peu de développement et qui risque donc de n’être en ligne que dans la soirée, voir demain. Le résultat est super sympa dans un style beaucoup plus sobre et j’avoue être impatient qu’il soit en place!

symfony + Mac OS X + MAMP = coeur!

Oct
10

Update: A cleaner version of this has been written: Running numerous symfony versions using MAMP on Mac OS X

Travaillant désormais avec le framework symfony, je me suis dit qu’il serait sympa de pouvoir l’installer sur ma bécane. Pas mal de tutos à droite à gauche, un petit mix de tout ça et, puisque le terminal n’est pas trop un pote, un peu de bol (bein si!). Voilà donc un moyen de vous faire partager ma galère mais également, de me l’éviter de nouveau si j’avais à réinstaller tout ça à l’avenir.

PHP5 fait des siennes

Déjà, nous partirons du principe que vous avez déja installé et activé MAMP, rien de bien difficile. Première galère lorsque l’on tappe un

php -v

bein déjà, ça merde! PHP5 n’est pas la version utilisée par défaut. Direction mon ami à lunette (Google…) et je tombe chez Olivier Mansour. 5 ans chez Clever Age, c’est formateur, c’est sur! Là, je trouve la solution à mes problèmes et ce qui me semble être une marche à suivre.

Dans /Applications/MAMP/bin/setenvmamp.sh (doit être créé s’il n’existe pas) on tappe

PATH=/Applications/MAMP/bin/php5/bin:$PATH export PATH

Pour appeler ce script, on édite /Users/votrenomdutilisateur/.profile Idem que précédemment, à créer s’il n’existe pas et on y met:

test -r /Applications/MAMP/bin/setenvmamp.sh && . /Applications/MAMP/bin/setenvmamp.sh

On ferme, le Terminal, on le ré-ouvre et ô miracle, php 5 est là! Kewl dude, let’s rock on!

Pear prise de tête!

On pourrait penser selon le site d’Olivier que nous sommes au bout de nos peines mais, quand, comme moi, on ne connait que les rudiments du Terminal, c’est là que commence réellement le sport. Il vous faudra effectivement tapper:

pear channel-discover pear.symfony-project.com
pear install symfony/symfony
pear install --alldeps http://phing.info/pear/phing-current.tgz

Et là, catastrophe, faut faire plein de mises à jour. Ne me souvenant plus vraiment comment j’ai fait… ouai je sais, s’trop un looser le type… il faut utiliser les mêmes commandes précédemment citées mais avec les autres adresses. Si le channel est déja présent, il vous faudra juste utiliser la commande pear channel-update XXX qui fonctionne pas trop mal… Mais, logiquement, on a beau s’acharner à balancer des symfony dans le Terminal, bein ça fonctionne toujours pas et c’est là qu’entre en scène le second tuto que j’ai utilisé!

Happy ending

Grâce au second tuto, on apprend qu’il faut balancer un

sudo /Applications/MAMP/bin/php5/bin/peardev install symfony/symfony

mais également que… ça fonctionne! Y’a plus qu’a! Pour le reste, allez jeter un oeil sur le site de symfony, rien de bien compliqué. Ils se marièrent, eurent plein d’enfants et vécurent heureux jusqu’à la fin de leur jour. Un vrai happy ending en somme.

UPDATE du 13/09/2008: En fait non, c’est pas encore un happy ending! La version d’Apache préinstallée avec Mac OS X a su se faire oublier et du coup, vient foutre la merde dans les vhosts! Solution super cheap mais radicale:

sudo apachectl stop
sudo rm -rf /usr/bin/apachectl

L’ancienne version d’Apache est ainsi arrêtée puis anéantie pour laisser MAMP faire ce qu’il doit. Et là, les vhosts seront enfin opérationnels! Un petit redémarrage de MAMP au cas où et hop, tout est en place! (En)fin heureuse!