Júnior Oliveira

C Sharp; Delphi; ASP .NET; PHP; Javascript;

Consumindo DataSnap Server com PHP

03 Mar 2011 php, delphi, datasnap, json, jquery

Olá pessoal, estava estudando DataSnap com Delphi XE, e agora resolvi postar para vocês o resultado deste estudo. O primeiro post será sobre consumir um método em um servidor DataSnap a partir de um cliente em PHP.

Segue o código da nossa página principal "index.htm". O código é bem simples apenas para mostrar a integração do PHP com o DataSnap Server, a única observação é que estou utilizando o framework jQuery para JavaScript apenas para deixar o exemplo mais interessante. Segue o link para download jqueryui.com.

 1 <html>
 2 <head>
 3     <title>ClientPHP</title>
 4     
 5     <!--jQuery-->
 6     <link rel="stylesheet" type="text/css" href="includes/css/ui-lightness/jquery-ui-1.8.9.custom.css">
 7     <script type="text/javascript" src="includes/js/jquery-1.4.4.min.js"></script>
 8     <script type="text/javascript" src="includes/js/jquery-ui-1.8.9.custom.min.js"></script>
 9     
10     <!--Aplicacao-->
11     <link rel="stylesheet" type="text/css" href="includes/css/style.css">
12     <script type="text/javascript" src="includes/js/script.js"></script>
13     
14 </head>
15 <body>
16  <form id="form_index" name="form_index" action="" onSubmit="return false">
17         <label for="txtCPF" class="label">CPF: </label>
18         <br />
19         <input id="txtCPF" name="txtCPF" type="text" value="" class="text ui-widget-content ui-corner-all"/>
20         <button id="btnValidar">Validar</button>
21         <img id="loading" src="includes/images/loading.gif" width="16" height="16">
22     </form>
23 </body>
24 </html>

Abaixo o código do arquivo "style.css".

 1 body {
 2  font: 62.5% "Trebuchet MS" , sans-serif;
 3  margin: 50px;
 4 }
 5 
 6 .text {
 7  padding: .3em;
 8 }
 9 
10 .label {
11  font: 14px "Verdana", sans-serif;
12 }

Agora o codigo do arquivo "script.js".

 1 $(document).ready(function() {
 2  //Personaliza os botoes da tela.
 3  $("button").button();
 4  
 5  //Esconde a imagem de loading.
 6  $("#loading").hide();
 7  
 8  //Evento do botao Validar.
 9  $("#btnValidar").click(function() {
10      
11      //Verifica se foi digitado um CPF.
12      if ($.trim($("#txtCPF").val()) == "") {
13          //Monstra a mensagem para o usuario.
14          showMessage("Digite um CPF!");
15 
16          return false;
17      }        
18      
19      //Mostra a imagem de loading.
20      $("#loading").show();
21      
22      //Realiza uma requisicao sem atualizar a pagina.
23      $.ajax ({
24          //Tipo da requisicao.
25          type : "post", 
26          //Caminho da Pagina que ira processar a requisicao.
27          url : "index.source.php",
28          //Serializa os campo do formulario e passa
29          //como parametro para a pagina processar.
30          data : $("#form_index").serialize(),
31          //Caso nao aconteca nenhum erro, apresenta a mensagem
32          //de retorno da pagina.
33          success : function(msg) {
34              showMessage(msg);
35              //Esconde a imagem de loading.
36              $("#loading").hide();
37          },
38          error : function() {
39              showMessage("Ocorreu um erro!");
40              //Esconde a imagem de loading.
41              $("#loading").hide();
42          }
43      });      
44  });
45 })
46 
47 function showMessage(message) {
48  //Cria uma div em tempo de execucao no body para mostrar
49  //a mensagem ao usuario.
50  $("body").append("<div id='message'>" + message + "</div>");
51 
52  //Configura e mostra a div criada acima.
53  $("#message").dialog({
54      bgiframe : true,
55      modal : true,
56      minimizable : false,
57      resizable : false,
58      closeOnEscape : true,
59      title : "Mensagem",
60      width : "300px",
61      buttons : {
62          Ok : function() {
63              //Quando clicar em OK remove a div do html.
64              $("#message").remove();
65          }
66      },
67      close : function() {
68          //Caso feche a div sem clicar em OK remove a div 
69          //do html tambem.
70          $("#message").remove();
71      }
72  });
73 }

E por fim o código da nossa página "index.source.php" que irá processar os dados.

 1 <?php
 2 
 3  //Abilita apenas para aparecer os erros da aplicacao.
 4  error_reporting(E_ERROR); 
 5  
 6  //Chama a funcao btnValidar()
 7  btnValidar();
 8  
 9  function btnValidar()
10  {
11      //Caminho do servidor de aplicacao.
12      define("servidor", "http://localhost:8081/datasnap/rest/");
13      
14      //Metodo que sera consumido.
15      define("metodo", "TServerFunctions/validateCPF/");
16      
17      //Parametros do metodo.
18      $parametro = $_REQUEST["txtCPF"];
19      
20      //URL que sera processada.
21      $url = sprintf("%s%s%s", servidor, metodo, $parametro);
22      
23      $pagina;
24      try
25      {
26          //Faz a requisicao a url montada acima.
27          $pagina = httpGet($url);
28      }
29      catch (Exception $e)
30      {
31          //Sai do metodo e apresenta a mensagem de erro
32          //para ser capturada pela funcao sucess do jQuery.
33          die($e->getMessage());
34      }
35      
36      //Le os dados de retorno do servidor passando para JSON.
37      $obj = json_decode($pagina[0]);
38      
39      //Verifica o retorno do metodo. 
40      //E printa para ser capturada pela funcao sucess do jQuery.
41      if ($obj->{"result"}[0])
42          echo("CPF Valido!");
43      else
44          echo("CPF Invalido!");
45  }
46      
47  function httpGet($url)
48  {
49      //Faz a requisicao a url montada acima.
50      $result = file($url);
51      if ($result == NULL)
52          throw new Exception("Ocorreu um erro!");
53      
54      return $result;
55  }
56  
57 ?>

Abaixo uma imagem de como deverá ser criada a estrutura de pastas dos arquivos citados acima.

auto

E agora uma imagem de como ficará o exemplo.

auto

Bom pessoal espero que tenham gostado e que seja útil de alguma forma. A idéia deste post foi mesmo apenas demonstrar como é fácil consumir um método usando PHP em um servidor DataSnap.