IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Symfony PHP Discussion :

Communication ANDROID et Base de donnée SYMFONY


Sujet :

Symfony PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Points : 17
    Points
    17
    Par défaut Communication ANDROID et Base de donnée SYMFONY
    Bonsoir dans le cadre d'un projet d'étude .
    Je cherche un moyen pour que mon appli Android , puisse accéder a ma Base de donnée symfony , obtenir les données des table et persister des données dans cette base .

    J'ai Symfony 3 , voici la liste de mes BD :
    Nom : bdmysql.PNG
Affichages : 1373
Taille : 15,4 Ko

    Quel moyen utiliser (webservice) pour pouvoir le faire et surtout comment ? j'ai beaucoup chercher sur google , mais je ne tombe pas sur une réponse concrète au problème .

    Hormis ce topic qui semble aborder un peu le même sujet même si l'auteur n'a pas partager tous les codes nécessaires : http://www.developpez.net/forums/d12...services-json/

    J'ai tenter avec un script json de récupération de BD qui fonctionne sous eclipse android et les BD mysql (toutes) hormis celle de symfony
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <?php
    $con = mysqli_connect("localhost","root","","tblville");
    if (mysqli_connect_errno())
      {
      echo "Failed to connect to MySQL: " . mysqli_connect_error();
      }
     
    $result= mysqli_query($con,"SELECT * FROM tblville");
     
    while($row=mysqli_fetch_assoc($result))
    $output[]=$row;
    print(json_encode($output));
    mysqli_close($con);
    ?>
    Code dans la partie android :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    package com.example.cbmedandroid;
     
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.util.ArrayList;
    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.NameValuePair;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.entity.UrlEncodedFormEntity;
    import org.apache.http.client.methods.HttpPost;
    import org.apache.http.impl.client.DefaultHttpClient;
    import org.apache.http.message.BasicNameValuePair;
    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
     
    import com.example.cbmedandroid.R.string;
     
    import android.app.Activity;
    import android.app.ListActivity;
    import android.net.ParseException;
    import android.os.Bundle;
    import android.os.StrictMode;
    import android.util.Log;
    import android.widget.ArrayAdapter;
    import android.widget.TextView;
    import android.widget.Toast;
    public class MainActivity extends Activity {
    	TextView t;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            t = (TextView) findViewById(R.id.text1);
         StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
         StrictMode.setThreadPolicy(policy);
         t.setText(getServerData(strURL));
        }
         public static final String strURL = "http://10.0.2.2/connexion.php";
     
         private String getServerData(String returnString) {
        	 InputStream is = null;
        	 String result ="";
     
        	 ArrayList<NameValuePair> nameValuePaires = new ArrayList<NameValuePair>();
        	 nameValuePaires.add(new BasicNameValuePair("tblville","tblville"));
        	 // Envoie de la commande Http
        	 try{
        		 HttpClient httpclient = new DefaultHttpClient();
        		 HttpPost httppost = new HttpPost(strURL);
        		 httppost.setEntity(new UrlEncodedFormEntity(nameValuePaires));
        		 HttpResponse response = httpclient.execute(httppost);
        		 HttpEntity entity = response.getEntity();
        		 is = entity.getContent();
         }
         catch(Exception e){
          Log.e("log_tag","Error in http connection "+e.toString());
           }
     
     
         //conversion de la réponse en chaine de caractère
            try
            {
             BufferedReader reader = new BufferedReader(new InputStreamReader(is,"UTF-8"));
     
             StringBuilder sb  = new StringBuilder();
     
             String line = null;
     
             while ((line = reader.readLine()) != null) 
             {
                  sb.append(line + "\n");
             }
     
             is.close();
     
             result = sb.toString();
            }
            catch(Exception e)
            {
             Log.e("log_tag","Error converting result"+e.toString());
            }
            //recuperation des donnees json
            try{
              JSONArray jArray = new JSONArray(result);
     
                 for(int i=0;i<jArray.length();i++)
                 {
     
                       JSONObject json_data = jArray.getJSONObject(i);
                       Log.i("log_tag","ID_ville : "+json_data.getString("ID_ville")+" , Nom_ville : "+json_data.getString("Nom_ville")
                    		   );
                        returnString += "\n\t" + jArray.getJSONObject(i);
     
                }
            }
                catch(JSONException e){
                 Log.e("log_tag","Error Parsing data"+e.toString());
                } 
                return returnString;
     
    }
    }
    En recherchant , certains disent qu'il faut utiliser la méthode JsonResponse pour récupérer des données/entités dans la BD symfony
    Ce que j'ai fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    // JSON ACTION
    	public function jsonAction()
    	{
    	 $data = $this->getDoctrine()->getManager()->getRepository('CBMedBundle:Patients')->findAll();
      return new JsonResponse($data);
    	}
    Mais du coup , comment récupérer ce JsonResponse en android ? le strURL je mets quoi comme adresse ? celle du controller ou.. ?

    Bref merci de m'aider

  2. #2
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    sans répondre directement à ta question, pour info la meilleure façon de faire est d'utiliser REST.

    l'avantage c'est qu'à partir de n'importe quelle plateforme(appli mobile, site web, angular...) tu accèdes à l'API REST juste en utilisant une requête http (pas de connexion en base...)
    par exemple en faisant un GET sur http://monsite/api/produits.xml te renvois tous les produits au format .xml
    ou même http://monsite/api/produits/23.json te renvois le produits ayant l'ID=23 au format json

    pour mettre en place une api rest : FOSRestBundle (assez simple)
    pour sécuriser ton api : FOSOAuthServerBundle (plus complexe)

    mais bon, même si c'est pas trop difficile de le mettre en place cela demande quand même un certains temps...

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Ok Merci je vois .
    J'avoue j'ai beaucoup chercher sans réellement trouver de solution je crois bien que je vais me tourner sur du REST avec FOSRestBundle

  4. #4
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    puisque tu as choisi cette voie, voici 2 ptits trucs :

    1) pour tester tes requêtes REST tu peux utiliser postman sur chrome
    2) ensuite pour n'importe quel client qui veut accéder à l'API il existe une librairie php, guzzle. qui permet de faire simplement des requêtes et de récupérer les données
    dans une action du controller par exemple (ou en faire un service)
    (guzzle se base sur curl, une extension php qui est activé normalement)

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Ok , je suis en train d'installer FOSRestBundle et la JMSSerializerBundle
    avec ce tuto : http://obtao.com/blog/2013/12/creer-...ation-symfony/

    C'est le bon tuto pour faire l'api n'est ce pas ?

    A partir de mon appli android (eclipse android) , j'ai juste a rentrer l'adresse de l'api (route) et les requêtes fonctionneront ou il faut nécessairement le guzzle ?

  6. #6
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    ce tuto devrait faire l'affaire.

    en fait, sur php c'est curl qui permet de lancer une requête http et de récupérer la réponse.
    guzzle est une couche supplémentaire qui utilise curl afin de faire les choses simplement.

    sur android, il faut une librairie qui peut faire comme guzzle.

  7. #7
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2015
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Mauritanie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Avril 2015
    Messages : 17
    Points : 17
    Points
    17
    Par défaut
    Ok c'est bon Merci , j'ai installer postman , créer un api qui récupère la listes des patients selon l'id

    Mais du coup , ce n'est pas préciser dans le tuto , comment appeler l'api ?

    mon api est de format : api/pats/{users}.{format}

    quand met : api/pats/1.json dans la barre url de postman , ça me dit .
    Could not get any response
    This seems to be like an error connecting to http://api/pats/1.json.
    je suppose que c'est pas la bonne adresse ?
    quand je met : localhost/api/pats/1.json , ça me rend un
    404 , the requested url was not found
    je crois bien que c'est la dernière étape .


    EDIT : C'est bon, j'ai trouver la bonne adresse dans symfony : http://127.0.0.1:8000/api/pats/1.json

  8. #8
    Membre expert
    Avatar de dukoid
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2012
    Messages
    2 100
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2 100
    Points : 3 004
    Points
    3 004
    Par défaut
    n'oubli pas les petits outils comme la commande suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    php app/console router:debug
    affiche toutes les routes disponibles sur ton projet !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 11/11/2012, 02h05
  2. utilser uitable en communication avec une base de données
    Par Carole73 dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 25/09/2012, 09h33
  3. Réponses: 5
    Dernier message: 04/04/2011, 10h26
  4. communication entre une base de données et mfc
    Par Espoir27 dans le forum MFC
    Réponses: 4
    Dernier message: 19/05/2010, 11h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo