Artisan Développeur

Qualité, amélioration continue, agilité, professionnalisme.

Utiliser nuSOAP Bundle avec Symfony2

Comment utiliser nuSOAP Bundle, avec Symfony2 !

J’ai besoin d’utiliser des webservices SOAP, je veux utiliser nuSOAP, après quelques recherches, je vois le bundle symfony2 de nuSOAP.

Sur leur doc, il y a ça :

{
    "require": {
        "noiselabs/nusoap-bundle": "dev-master"
    },
    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "nusphere/nusoap",
                "version": "0.9.5",
                "dist": {
                    "url": "http://downloads.sourceforge.net/project/nusoap/nusoap/0.9.5/nusoap-0.9.5.zip",
                    "type": "zip"
                },
                "autoload": {
                    "classmap": ["lib/"]
                }
            }
        }
    ],
}

Je met ça dans mon composer.json et j’obtiens des erreurs lorsque je lance composer, en mettant ce code à la fin de mon fichier, ça me désinstallait une partie des bundle (je ne suis pas très familier avec composer).

J’ai pris la ligne require que j’ai simplement ajouté , il faut penser à finir la ligne du dessus par une virgule:

    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "~2.4",
        "doctrine/orm": "~2.2,>=2.2.3",
        "doctrine/doctrine-bundle": "~1.2",
        "twig/extensions": "~1.0",
        "symfony/assetic-bundle": "~2.3",
        "symfony/swiftmailer-bundle": "~2.3",
        "symfony/monolog-bundle": "~2.4",
        "sensio/distribution-bundle": "~2.3",
        "sensio/framework-extra-bundle": "~3.0",
        "sensio/generator-bundle": "~2.3",
        "incenteev/composer-parameter-handler": "~2.0",
        "doctrine/doctrine-fixtures-bundle": "2.2.*",
        "ddeboer/data-import": "@stable",
        "ddeboer/data-import-bundle": "~0.1",
        "noiselabs/nusoap-bundle": "dev-master"
    },

Et à la fin du fichier, j’ai ajouté le repository de type « package », il faut ajouter une virgule après le } de la section « extra » et coller le code :

 "repositories": [
        {
            "type": "package",
            "package": {
                "name": "nusphere/nusoap",
                "version": "0.9.5",
                "dist": {
                    "url": "http://downloads.sourceforge.net/project/nusoap/nusoap/0.9.5/nusoap-0.9.5.zip",
                    "type": "zip"
                },
                "autoload": {
                    "classmap": ["lib/"]
                }
            }
        }
    ]

 

Voici mon fichier composer.json avec nuSOAP Bundle qui fonctionne en entier.

{
    "name": "symfony/framework-standard-edition",
    "license": "MIT",
    "type": "project",
    "description": "The \"Symfony Standard Edition\" distribution",
    "autoload": {
        "psr-0": { "": "src/" }
    },
    "require": {
        "php": ">=5.3.3",
        "symfony/symfony": "~2.4",
        "doctrine/orm": "~2.2,>=2.2.3",
        "doctrine/doctrine-bundle": "~1.2",
        "twig/extensions": "~1.0",
        "symfony/assetic-bundle": "~2.3",
        "symfony/swiftmailer-bundle": "~2.3",
        "symfony/monolog-bundle": "~2.4",
        "sensio/distribution-bundle": "~2.3",
        "sensio/framework-extra-bundle": "~3.0",
        "sensio/generator-bundle": "~2.3",
        "incenteev/composer-parameter-handler": "~2.0",
        "doctrine/doctrine-fixtures-bundle": "2.2.*",
        "ddeboer/data-import": "@stable",
        "ddeboer/data-import-bundle": "~0.1",
        "noiselabs/nusoap-bundle": "dev-master"
    },
    "scripts": {
        "post-install-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ],
        "post-update-cmd": [
            "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
            "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile"
        ]
    },
    "config": {
        "bin-dir": "bin"
    },
    "extra": {
        "symfony-app-dir": "app",
        "symfony-web-dir": "web",
        "incenteev-parameters": {
            "file": "app/config/parameters.yml"
        },
        "branch-alias": {
            "dev-master": "2.4-dev"
        }
        
    },    "repositories": [
        {
            "type": "package",
            "package": {
                "name": "nusphere/nusoap",
                "version": "0.9.5",
                "dist": {
                    "url": "http://downloads.sourceforge.net/project/nusoap/nusoap/0.9.5/nusoap-0.9.5.zip",
                    "type": "zip"
                },
                "autoload": {
                    "classmap": ["lib/"]
                }
            }
        }
    ]


}

Pour finir le code de mon controller, qui utilise un service de météo, juste pour initialiser et tester le SOAP.

    /**
     * @Route("/Connect")
     * @Template()
     */
    public function ConnectAction()
    {
      $error = "";

      $client = new \nusoap_client('http://www.webservicex.net/globalweather.asmx?WSDL', 'wsdl');					
      
      $err = $client->getError();
      if ($err) {
	      $error .= "<h2>Constructor error</h2><pre>" . $err . "</pre>";
      }
     
      $param = array('CountryName' => 'FRANCE');

      $result = $client->call('GetCitiesByCountry', array('parameters' => $param), '', '', false, true);

      // Check for a fault
      if ($client->fault) {
	$error .= "<h2>Fault</h2><pre>";
	$error .= print_r($result);
	$error .= "</pre>";
      } else {
	// Check for errors
	$err = $client->getError();
	  if ($err) {
		  // Display the error
		  $error .= "<h2>Error</h2><pre>" . $err . "</pre>";
	  } else {
		  // Display the result
		  $resultat["resultat"] = $result;
		  
	  }
	}

	$xml = simplexml_load_string($result["GetCitiesByCountryResult"]);

	foreach ($xml->Table as $character) {
	  echo $character->City."</br>";
	}

		
	return $resultat;

    }

 

 

 

 

 

 

 

 

 

 

 

 

 

Get started node.js

Je me lance ! Un pote me parle de node.js, forcément c’est pas mon truc le javascript, alors je me dis bon, dans une autre vie. Mais trop tard, quand t’es passionné de prog, de web et que t’as des trucs à faire, tu finis par te dire, et si je le faisais en node.js ? Au moins pour essayer, et voilà… Here I am !

Node.js est dispo dans les dépôts backports, il faut donc l’ajouter à votre source.list

nano /etc/apt/sources.list

Ajouter cette ligne dedans :

deb http://ftp.debian.org/debian wheezy-backports main contrib non-free

Avec nano ctrl+o pour sauvegarder, ctrl+x pour fermer, ensuite :

apt-get update
apt-cache search node.js

ruby-amqp - feature-rich, asynchronous AMQP 0.9.1 client
nodejs - evented I/O for V8 javascript
nodejs-dbg - evented I/O for V8 javascript (debug)
nodejs-dev - evented I/O for V8 javascript (development files)
nodejs-legacy - evented I/O for V8 javascript (legacy symlink)

Là je vois que j’ai node.js disponible :

apt-get install nodejs nodejs-legacy

Et après je fais quoi ? Je vais chercher un tuto «hello world» 🙂 Sur le site node.js

Je crée un répertoire, le fichier exemple.js

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

Je lance la commande:

node example.js

J’accède avec le navigateur et c’est bon, maintenant y’a plus qu’à apprendre à coder en Javascript !

 Source

 

 

 

 

 

 

WordPress multi site, mod vhost alias et sous domaines

WordPress multisite, apache, mod_vhost_alias

Comment utiliser mod_vhost_alias avec wordpress en mode multisite

Si comme moi, cher lecteur (j’ai toujours voulu écrire ça ^^ ) tu aimes bien avoir la possibilité d’avoir automatiquement un sous domaine lorsque tu crées un répertoire à la racine de ton site, tu dois connaître ou utiliser (sans connaître) mod_vhost_alias. Et dans les directives de ton vhost avoir une ligne de ce genre :

VirtualDocumentRoot /var/www/monjolisiteweb/htdocs/%1
virtualdocumentroot

J’étais très heureux comme ça ! Un jour, j’ai commencé à écouter ce que disent, entre autre, les gens de the family (http://www.thefamily.co/)  sur le growth hacking.

(Un super MOOC proposer par IONISx est disponible d’ailleurs.)

Entre temps j’ai retenu une chose il faut segmenter pour communiquer plus précisément, cibler, adapter le discours, avoir du feedback … Pour notre projet de startup ([maj 2016 ]qui n’a pas abouti), en version lean, low cost, on a opté pour un template wordpress « tout fait » (c’est très moche ce que la pauvreté du début de l’aventure te fait faire ^^ mais faut être pragmatique ! ). Une flat page, responsive très à la mode, mais comment je fais pour segmenter ?

Avec wordpress je savais que le mutisite (network) était possible, donc go sur le codex (comment configurer le multisite), j’ouvre mon wp-config.php, j’ajoute la ligne

/* Multisite */
define('WP_ALLOW_MULTISITE', true);

bref je suis le tuto du codex.

Évidemment, les sous répertoires, c’est moches, moi j’aime pas les sous répertoires – comme dirait le schtroumpf grognon, wiki.kaizendo.fr est mieux que kaizendo.fr/wiki, ça n’engage que moi, mais comme c’est moi qui décide « that’s it ! ».

Le multisite aussi me permettra, à terme, d’avoir des personnes différentes qui s’occuperont indépendamment des segments, en tout cas je l’espère.

J’active le multi-site wordpress, je crée le 2ème site de mon réseau wordpress, j’essaye d’afficher la page et là, c’est le drame… Erreur 404.

Après cinq minutes à me creuser la tête, un petit tour par la zone dns, deux trois tests, je repense à mes sous domaines automatiques ! La solution est d’avoir un vhost spécifique pour le WordPress network qui va contenir les alias nécessaires, un alias par site.

Je crée un vhost avant la directive VirtualDocumentRoot, avet comme document root l’install wordpress. Pour chaque site de mon WordPress network il faudra faire un alias à ce vhost.

<VirtualHost *:80>
ServerName sousdomaine.kaizendo.fr
ServerAlias autreSousDomaine.kaizendo.fr
DocumentRoot /var/www/monjolisiteweb/htdocs 
<Directory /var/www/monjolisiteweb/htdocs >
Options ExecCGI FollowSymlinks
AllowOverride all
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
Vhost wordpress multi site

Quand le requête est traitée, le vhost est trouvé, renvoyé vers le document root du wordpress master, et ça fonctionne ! Comme ça je garde la flexibilité des sous domaines automatiques et j’utilise la capacité multisite de wordpress.