Derniers snippets
[Symfony] [Validator] Valider une valeur en fonction d'une blacklist
Pour s'assurer qu'une valeur saisie par un utilisateur dans un formulaire Symfony ne fait pas partie d'une liste de valeurs interdites, on peut utiliser le validateur suivant :
Fichier sfBlacklistValidator.class.php :
<?php class sfBlacklistValidator extends sfValidator { public function initialize($context, $parameters = null) { // initialize parent parent::initialize($context); // set defaults $this->getParameterHolder()->set('blacklist_error', 'Value is not an allowed one'); $this->getParameterHolder()->set('case_sensitive', false); $this->getParameterHolder()->set('trim', true); $this->getParameterHolder()->add($parameters); return true; } public function execute(&$value, &$error) { // Forbidden names $blacklist = $this->getParameter('blacklist'); $casesensitive = $this->getParameter('case_sensitive'); $trim = $this->getParameter('trim'); if ($trim) { $value = trim($value); } if (is_array($blacklist) && count($blacklist) > 0) { if ($casesensitive) { $match = in_array($value, $blacklist); } else { $match = false; foreach ($blacklist as $item) { if (is_string($item) && strtolower($item) == strtolower($value)) { $match = true; break; } } } if ($match) { $error = $this->getParameterHolder()->get('blacklist_error'); return false; } } return true; } }
Dans un fichier de validation yml:
fields:
myfield:
sfBlacklistValidator:
blacklist: [admin, contact, info, infos, commercial, tech, support, sales, partnership, webmaster, business, owner]
case_sensitive: no
trim: yes
blacklist_error: The username you requested is not available
Les options sont assez explicites, mais en voici tout de même le détail :
- blacklist: tableau de valeurs prohibées au format YAML
- case_sensitive: effectuer les comparaisons en tenant compte de la casse
- trim: inclure les espaces en début et fin de chaînes
- blacklist_error: Message d'erreur à afficher en cas de valeur blacklistée
[Symfony] [Propel] Afficher la dernière requête effectuée
Pour afficher la dernière requête effectuée avec Propel :
echo Propel::getConnection()->getLastExecutedQuery();
C'est tout con, hein ?
Gérer les libellés et tris d'un selectbox avec Propel et les helpers objets Symfony
Pour gérer un joli combobox avec des valeurs textuelles représentatives choisies pour un objet Propel et éventuellement les trier, on peut faire :
<?php echo object_select_tag($produit, 'getTypeProduitId', array ( 'related_class' => 'TypeProduit', 'peer_method' => 'doSelectOrderByCode', )) ?>
ou bien dans un generator.yml
fields:
departement_id:
params: text_method=getNomCode peer_method=doSelectOrderByCode
Configuration de base d'un VHost pour Apache
NameVirtualHost www.mywebsite.com:port <VirtualHost www.mywebsite.com:port> ServerAdmin admin@mywebsite.com DocumentRoot /path_to_htdocs/ <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /path_to_htdocs/> Options Indexes FollowSymLinks MultiViews AllowOverride None Order allow,deny allow from all </Directory> ErrorLog /var/log/apache2/error-mywebsite.log LogLevel warn CustomLog /var/log/apache2/access-mywebsite.log combined </VirtualHost>
A placer dans un fichier dans /etc/apache2/sites-enable/
Corriger l'encodage d'un fichier MYSql
Pour corriger les caractères bizarres qui peuvent apparaitre à la place des accents après une remontée d'un fichier de dump, il est possible de fixer l'encodage pour la connexion en rajoutant au début du fichier la ligne :
SET CHARACTER SET <encodage>;
J'utilise notamment souvent UTF8 dans ce cas, le fichier provenant d'un dump effectué sous linux, et remontant dans une base en latin1.
Shortest XmlHttpRequest instanciation ever
if (!XMLHttpRequest) { window.XMLHttpRequest = function() { return new ActiveXObject('Microsoft.XMLHTTP'); } }
Dump de toutes les bases d'un serveur MySQL dans des fichiers multiples
Si comme moi vous avez sous la main un serveur abritant plusieurs (dizaines, voir centaines de) bases de données, le jour où une des bases de données plante et qu'on vous demande de la restaurer, je vous souhaite bien du courage si vous n'avez qu'un résultat de mysqldump --all-databases sous la main.
Afin de pallier ce problème, j'ai écris ce script bash qui vous facilitera bien la vie !
Au programme :
sauvegarde des dump de chaque base dans des fichiers séparés compressés en gzip, eux même situés dans un dossier nommé en fonction de la date
suppression automatique du dump effectué il y a 7 jours.
Le script est destiné à être exécuté par un cron, par exemple toutes les nuits.
#!/bin/bash #paramètres de configuration du script #completer ici par le nom d'un utilisateur autorisé à dumper toutes vos bases : strMysqlUser="" #completer ici par le mot de passe de cet utilisateur : strPassword="" # completer ici par le chemin vers le repertoire de travail où va se trouver le dump # il est possible de préfixer le répertoire : # "/rep/de/travail/prefix_" donnera alors /rep/de/travail/prefix_20070505 repTravail="" #mémorisation de la date du jour et de la date d'il y a 7 jours dateActuelle=$(date +%Y%m%d) datePassee=$(date --date '7 days ago' +%Y%m%d) #Suppression de la sauvegarde d'il y a 7 jours echo "["$(date +%F\ %X)"] Suppression des dump du "$datePassee repTravailPasse=$repTravail$datePassee rm -R $repTravailPasse # début du dump echo "["$(date +%F\ %X)"] Dump du : "$dateActuelle repTravailActuel=$repTravail$dateActuelle mkdir $repTravailActuel # récupération de la liste des bdd, "tail -n +2" est présent pour ne pas récupérer le titre "Databases" renvoyé par mysql listDatabase=$(mysql --user=$strMysqlUser --password=$strPassword --exec="SHOW DATABASES;" | tail -n +2) #dump de chaque base dans un fichier for lineDatabase in $listDatabase do echo "["$(date +%F\ %X)"] Debut du dump de la base "$lineDatabase" vers "$repTravailActuel mysqldump --user="$strMysqlUser" --password="$strPassword" "$lineDatabase" | gzip > "$repTravailActuel"/"$lineDatabase".sql.gz echo "["$(date +%F\ %X)"] Dump compressé dans "$repTravailActuel"/"$lineDatabase".sql.gz" done echo "["$(date +%F\ %X)"] Fin de la sauvegarde" exit 0
Formatter un document XML avec DOM et PHP5
Ça peut bien aider.
$dom = new DOMDocument('1.0', 'UTF-8'); $dom->preserveWhiteSpace = false; $dom->load('/path/to/file.xml'); $dom->formatOutput = true; file_put_contents('formatted.xml', $dom->saveXML());
Raccourcis pour changer de bash rapidement
Beaucoup de monde connait le ctrl+alt+FX (X allant de 1 à 6 pour les sessions de terminal, et au dessus pour les sessions graphiques)
Je viens de découvrir par hasard le alt+super pour passer rapidement à la console suivante. (super étant assigné à la touche windows sur les claviers prévus pour fonctionner avec les systèmes de Microsoft)
Désactiver le bip système sous Ubuntu
Rien de plus exaspérant que ces bips disgrâcieux à chaque tabulation dans un shell. Pour remédier au problème :
$ echo "set bell-style visible" >> ~/.inputrc




