Astuce Limiter la version à mettre à jour avec Composer

Lorsque vous mettez à jour vos dépendances avec Composer, il peut arriver que vous ne souhaitiez pas avoir la dernière version disponible.

Par exemple, si j'ai un site Drupal en v8.2.7 et qu'une mise à jour de sécurité sort, je peux préférer passer en v8.2.8 plutôt qu'en 8.3.1.

Dans ce cas on peut préciser ça dans le fichier composer.json :

{
...
  "require": {
    "drupal/core": "~8.2.0",
    ...
  },
...
}

Explications :

  • ~8.2.0 signifie >= 8.2.0 & < 8.3.0
  • ~8.2 signifie >= 8.2 & < 9
  • Il existe aussi le signe ^, moins restrictif : ^8.2.1 signifie >=8.2.1 & < 9

Astuce Retirer le versionnement d'un fichier avec IntelliJ/PhpStorm

PhpStorm et IntelliJ proposent d'ajouter un fichier au versionnement (ex: git add), mais ne permettent pas de le retirer.

Une solution de contournement simple consiste à le faire en ligne de commande :

git rm --cached mon_fichier
git commit -m 'suppression du fichier'

pour un répertoire entier, ajoutez l'option -récursive :

git rm -r --cached mon_repertoire
git commit -m 'suppression du répertoire'

Astuce Rechercher un paquet

Si vous êtes sous une distribution avec apt d'installé, vous pouvez rechercher un paquet avec la commande suivante :

apt-cache search terme1 terme2

Remarques :

  • Si vous indiquez plusieurs termes, seuls les résultats avec chacun d'eux seront retournés
  • Les regexp sont gérées (au moins en partie). Ex : apt-cache search php.*memcach.

Si vous avez aptitude d'installé, une commande plus simple à mémoriser existe :

aptitude search terme1 terme2

Astuce Configurer le débogueur PHPStorm avec Apache sur une VM

Si vous utilisez une VM LAMP et PHPStorm, vous pouvez utiliser son débogueur pas à pas et visualiser/modifier vos variables en temps réel au cours de l'exécution.

Pour cela, plusieurs étapes sont nécessaires.

Installation de XDebug

Connectez-vous à votre VM, et lancez la commande d'installation :

sudo apt-get install php5-xdebug

Ensuite, activez le débogage distant de xdebug en éditant le fichier /etc/php5/apache2/conf.d/20-xdebug.ini. Ajoutez-y les lignes suivantes :

xdebug.remote_enable=1
xdebug.remote_host=192.168.0.1
xdebug.remote_port=9000
xdebug.max_nesting_level=500

Remarques :

  • Remplacez l'IP par celle de la machine sur laquelle vous lancez PHPStorm.
  • La dernière ligne évite une erreur de récursion lors du débogage

Ajout d'un environnement distant dans PHPStorm

Ajoutez une nouvelle connexion SSH à votre VM :

  • Allez dans File > Settings... > Build, Execution, Deployment > Deployment
  • Cliquez sur le + vert à droite, pour ajouter un environnement
  • Choisissez un nom
  • Dans Connection, choisissez le type SFTP, et renseignez toutes les informations
    Pour le Root path, indiquez le chemin vers le répertoire contenant vos sources sur votre VM (ex : /var/www/mon-site), ou un répertoire parent (ex : /var/www)
  • Dans Mappings, remplissez les 3 champs de chemin
    • Local path : la racine de votre projet sur la machine qui lance PHPStorm
    • Deployment path : le chemin relatif depuis le Root path défini précédemment, vers votre projet sur la VM (ex : / ou /mon-site)
    • Web path : / si vous utilisez un nom de domaine pointant directement vers votre projet
  • Validez

Précisez le mapping :

  • Allez dans File > Settings... > Languages & Frameworks > PHP > Server
  • Sélectionnez le serveur que vous venez de configurer
  • Pour chaque répertoire contenant des fichiers PHP à déboguer, cliquez à droite, dans la colonne Absolute path on the server
  • Saisissez le chemin absolu vers le répertoire correspondant sur votre VM (ex: /var/www/monsite/web ou /var/www/monsite/vendor)
  • Validez

Installez une extension dans votre navigateur

Pour déclenchez le débogage, il faut ajouter un cookie à vos requête lors de votre navigation.

L'extension easy Xdebug pour Firefox et XDebug Helper pour Chrome permettent d'activer/désactiver ce cookie automatiquement via un bouton.

Le site officiel pour PHPStorm liste d'autres extensions pour d'autres navigateurs.

Activez le débogage dans votre navigateur.

Activez le débogage dans PHPStorm

Cliquez sur le bouton Start Listening for PHP Debug Connections présent dans la barre d'outil de PHPStorm (téléphone gris avec un sens interdit rouge et un insecte vert).

Commencez le débogage

Affichez une page de votre site.

Lors du premier débogage, une popup apparaît dans PHPStorm vous demandant de confirmer le débogage (normalement la configuration présentée dans la popup n'a pas besoin d'être modifiée).

Pour les suivants, vous devriez voir apparaître une petite notification dans PHPStorm vous disant que le débogage a fonctionné, mais ne s'est pas arrêté.
Dans cette notification, vous pouvez activer l’arrêt automatique à la première ligne du fichier index.php. Sinon, ajoutez un point d'arrêt (clic dans la marge de gauche du fichier PHP à déboguer). Rechargez la page.


Erreur Problème de mémoire avec composer

Si vous utilisez composer dans une VM, vous pouvez avoir une erreur de mémoire due à un problème de swap :

Installation failed, reverting ./composer.json to its original content.
The following exception is caused by a lack of memory or swap, or not having swap configured
Check https://getcomposer.org/doc/articles/troubleshooting.md#proc-open-fork-failed-errors for details
 
[ErrorException]
proc_open(): fork failed - Cannot allocate memory

Plusieurs solutions sont décrites dans ce ticket sur Stackoverflow.

Celle (temporaire) mais qui marche particulièrement bien est la suivante. Il suffit de lancer ces commandes :

/bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
/sbin/mkswap /var/swap.1
/sbin/swapon /var/swap.1

Astuce Créer un lien symbolique

Pour créer un lien symbolique, il suffit d'utiliser la commande suivante :

ln -s chemin/vers/la/cible/du/lien chemin/vers/lien

Le premier paramètre contient le répertoire ou fichier à cibler, et le second (facultatif) le chemin/nom du lien à créer.

Les chemins peuvent-être relatifs ou absolus.


Astuce Installer la dernière version de drush

Sur les dépôts des distributions linux, c'est souvent une vieille version de drush qui est disponible (ex: Debian 8.4 -> drush 5.x).
Voici comment installer la dernière.

Pré-requis

Composer et GIT doivent être installés.

Composer

sudo apt-get install curl
sudo curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
 
# Vérification
composer --version

GIT

sudo apt-get install git
 
# Vérification
git --version

Installation

  • Téléchargez drush :
    sudo git clone --depth 1 https://github.com/drush-ops/drush.git /usr/local/src/drush
  • Mettez-le à jour :

    cd /usr/local/src/drush
    sudo composer install
  • Créez les liens symboliques suivant :

    sudo ln -s /usr/local/src/drush/drush /usr/local/bin/drush
    sudo ln -s /usr/local/src/drush/drush.complete.sh /etc/bash_completion.d/drush
  • Vérifiez l'installation :

    drush --version

Astuce Surcharger l'affichage d'une page existante

Drupal 8 propose nativement des pages pour gérer l'inscription, la connexion, l'oubli de mot passe.

Malheureusement actuellement il n'y a pas de suggestion de template proposée. (Comme on peut le voir habituellement en commentaire dans le code source lorsque le mode debug est activé.)

Il faut donc procéder autrement et utiliser les hook_form_alter() et hook_theme() classiques.

Par exemple, pour surcharger le formulaire de la page oubli de mot de passe :

// mymodule.module
 
/**
 * Implements hook_form_alter()
 */
function mymodule_form_alter(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
 
  // Si le formulaire est celui d'oubli de mot de passe
  if ($form_id == 'user_pass') {
    $form['#theme'] = ['my_register_form'];
  }
}
 
/**
 * Implements hook_themer()
 */
function mymodule_theme(&$form, \Drupal\Core\Form\FormStateInterface $form_state, $form_id) {
 
  return [
    'my_password_form' => [
      'template' => 'user_forget_password_form',
      'render element' => 'form',
    ],
  ];
}

Explications :

  • Le hook_alter() permet de modifier le thème à utiliser pour le formulaire. Le thème choisi doit exister ou être déclaré dans votre module.
  • Le hook_theme() permet de déclarer le nouveau thème my_password_form et d'y affecter un template spécifique.

Remarque :

Par défaut, sans cette configuration, le template natif form.html.twig serait utilisé. Pour créer votre propre template il peut donc être pratique d'en faire une copie, la renommer (ici user_forget_password_form.html.twig) et de s'en servir comme base pour effectuer vos modifications.


Astuce Suivre les liens symboliques

Si vous utilisez Virtual Box sous Windows pour émuler des VM sous Linux, avec des répertoires partagés, vous aurez surement des problèmes de création de liens symboliques dans ces répertoires.

Il suffit de créer les liens symbolique côté Windows et non pas sous Linux.
Cependant, cela peut ne pas être suffisant, si vous utilisez une version VirtualBox 4.1.8 ou ultérieure.

Dans ce cas, il vous faut modifier un paramètre désactivé par défaut, via la commande suivante :

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata "<nom_de_la_vm>" VBoxInternal2/SharedFoldersEnableSymlinksCreate/<nom_du_partage> 1