Archives de
Mois : octobre 2012

Changer le format du fichier services d’un bundle

Changer le format du fichier services d’un bundle

Lors de l’installation du bundle KnpMenuBundle pour gérer les menus je me suis rendu compte que le fichier services de mon bundle était au format xml. Pensant que symfony2 chercher tous seul les fichiers, je l’ai supprimé et remplacé par un équivalent au format yml.

Qu’elle ne fut pas ma surprise lorsque j’ai rechargé ma page de voir une erreur :

InvalidArgumentException: The file "services.xml" does not exist

En effet, afin de changer de ficher il faut modifier le fichier : DependencyInjection/MyBundleExtension.php afin de remplacer:

$loader = new Loader\XmlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.xml');

par

$loader = new Loader\YamlFileLoader($container, new FileLocator(__DIR__.'/../Resources/config'));
$loader->load('services.yml');

 

Et voilà le tour est joué, tous fonctionne à merveille.

Création d’une miniature avec HTML5

Création d’une miniature avec HTML5

En trainant sur le net j’ai trouvé un petit tuto qui explique comment faire la miniature d’une image en HTML5 sans uploader le fichier. L’image est afficher a coté du champ input.

La première étape et de créer un formulaire avec un champ input de type file et une balise output pour afficher la miniature..

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>HTML5 File Reader</title>
  </head>
  <body>
    <input type="file" id="files" />
    <output id="out"></output>
    <script>
    </script>
    </body>
</html>

Viens ensuite la partie javascript. Avant toute chose, Il faut vérifié que le navigateur supporte l’API FileReader.

if (window.FileReader) {
  function handleFileSelect(evt) {
} else {
  alert('Ce navigateur ne supporte pas FileReader');
}

Une fois cela fait un event listener est ajouté afin de mettre à jour la miniature lors de la sélection d’une nouvelle image.

document.getElementById('files').addEventListener('change', handleFileSelect, false);

Pour finir nous construisons la miniature grâce a l’image que nous récupérons par l’API FileReader.

function handleFileSelect(evt) {
  var files = evt.target.files;
  var f = files[0];
  var reader = new FileReader();

  reader.onload = (function(theFile) {
    return function(e) {
      document.getElementById('out').innerHTML = ['<img src="', e.target.result,'" title="', theFile.name, '" width="50"/>'].join('');
    };
  })(f);

  reader.readAsDataURL(f);
}

Le fichier final est le suivant :

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>HTML5 File Reader</title>
  </head>
  <body>
    <input type="file" id="files" />
    <output id="out"></output>
    <script>
      if (window.FileReader) {
        function handleFileSelect(evt) {
          var files = evt.target.files;
          var f = files[0];
          var reader = new FileReader();

          reader.onload = (function(theFile) {
            return function(e) {
              document.getElementById('out').innerHTML = ['<img src="', e.target.result,'" title="', theFile.name, '" width="50"/>'].join('');
            };
          })(f);

          reader.readAsDataURL(f);
        }
      } else {
        alert('Ce navigateur ne supporte pas FileReader');
      }
      document.getElementById('files').addEventListener('change', handleFileSelect, false);
    </script>
  </body>
</html>

 

Pour le voir en action c’est par ici.

Connexion MySQL avec le mamp de macports

Connexion MySQL avec le mamp de macports

Pour faire suite à l’installation de mamp avec macports, j’ai voulu installer symfony2. Lors de la configuration de la base de données, je n’ai pas rencontré de problèmes particuliers. Lorsque j’ai voulu créer la base de données avec symfony j’ai eu l’erreur suivante :

Could not create database for connection named `symfony`
SQLSTATE[HY000] [2002] No such file or directory

Après quelques recherches sur le net j’ai enfin trouvé la réponse. Lors de la configuration de la base de données, la valeur de l’hôte MySQL est localhost. Or la version de MySQL installé avec macports est configurée pour avoir le fichier mysqld.sock dans le dossier suivant:

/opt/local/var/run/mysql5/

Quand a PHP, il s’attend a le trouvé dans

/tmp

Forcement, cela pose problème. Pour le résoudre un lien suffit :

ln /opt/local/var/run/mysql5/mysqld.sock /tmp/mysql.sock

Et voilà la connexion MySQL en utilisant localhost fonctionne.