CodeIgniter v2 et Webservice avec ZendFramework
Dans un article plus ancien, j'avais expliqué comment créer des webservices avec CodeIgniter v1.7 en utilisant le Framework Zend pour générer le WSDL. CodeIgniter v2 est sorti entre temps, si le principe n'a pas réellement changé, voici tout de même comment créer un Webservice avec CodeIgniter v2 et ZF.
Import des fichiers Zend
Tout d'abord téléchargez les fichiers du framework Zend (les composants minimaux). Si vous n'êtes pas à l'aise avec la configuration de PHP et les include_path, vous pouvez placer le dossier Zend à la racine de votre application CodeIgniter :
De la même manière que pour codeigniter v1.7, créons maintenant la classe webservice.
Création du webservice
Nous créons le webservice dans le répertoire /application/soap ( /application/soap/soapservertest.php ).
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class soapservertest
{
var $ci;
/**
* Méthode très intéressante
* @return string
*/
function HelloWorld()
{
return "Hello World";
}
/**
* Dis bonjour à quelqu'un
* @param string $someone
* @return string
*/
function SayHelloToSomeOne($someone)
{
return "Hello $someone";
}
/**
* Renvoi un tableau
* @return array
*/
function getWebsites()
{
return array('http://www.ligams.com','http://ligams.net');
}
/**
* Appelle la base de donnée du site
* @return string
*/
function callSomethingInDataBase()
{
$this->ci =& get_instance();
$this->ci->load->model('XXXXXX');
$users = $this->ci->XXXXXX->selectAll();
return json_encode($users);
}
}
?>
Je ne reviens pas la dessus, il faut commenter cette classe, c'est grâce aux commentaires que sera généré le fichier WSDL, descripteur du webservice. Vous pouvez en savoir plus sur ce fichier en vous reportant à l'article Création de webservices en PHP.
Création du controller Webservice
Pas de différence avec CI v 1.7 :
<?php
require('Zend/Soap/Server.php');
require('Zend/Soap/AutoDiscover.php');
require('Zend/Soap/Server/Exception.php');
/**
* Description of webservice
* @author Stéphane
*/
class webservice extends MY_Controller {
function serve($class,$wsdl = null)
{
/*
* sous-entend que vous placez vos classes webservice class dans le répertoire soap de votre app
* et qu'il est nommé NOMDEVOTRE WEBSERVICE.php
*/
$path = APPPATH.'soap/'.$class.'.php';
if(file_exists($path))
{
require_once($path);
if($wsdl=='wsdl')
{
ini_set("soap.wsdl_cache_enabled",0);
$wsdl = new Zend_Soap_AutoDiscover();
$wsdl->setUri(base_url().get_class($this).'/serve/'.$class);
$wsdl->setClass($class);
$wsdl->handle();
}
else
{
$szWSDLUrl = base_url().get_class($this).'/serve/'.$class.'/wsdl';
$options = array('soap_version' => 2);
$server = new Zend_Soap_Server($szWSDLUrl,$options);
$server->setClass($class);
$server->handle();
}
}
else
{
show_404();
}
}
}
?>
Et voilà votre webservice crée avec CodeIgniter V2 !












Commentaires