diff --git a/html/doc/class/.htaccess b/html/doc/class/.htaccess old mode 100755 new mode 100644 diff --git a/html/doc/class/config.class.php b/html/doc/class/config.class.php old mode 100755 new mode 100644 diff --git a/html/doc/class/docMobile.class.php b/html/doc/class/docMobile.class.php old mode 100755 new mode 100644 index 01c744620..059b61e38 --- a/html/doc/class/docMobile.class.php +++ b/html/doc/class/docMobile.class.php @@ -132,7 +132,7 @@ private function debuter() { $dwf.cordova().is_connected_web(); qui retourne true si l'appareil est connecté, sinon false;
-Le framework permet de gérer les formulaires en toute simplicité, en 6 étapes
La création d'un nouveau projet est automatisé par le fichier /html/commun/new_app.php accédez à ce fichier par votre navigateur -> localhost
- Ce fichier ne peut se lancer que depuis votre localhost ! il n'est pas possible de s'en servir à distance sans en modifier le code.
+ Ce fichier ne peut se lancer que depuis votre localhost. Il n'est pas possible de s'en servir à distance sans en modifier le code.
Une fois l'interface de création de projet ouvert, remplissez les champs correctement. Ces paramètres seront modifiable dans config.class.php
La classe "pages" est le point de départ de votre projet et est constitué des éléments suivants :
- Les classes dites "metiers" sont les classes spécifiques à votre projet que vous aurez vous mêmes créé dans le dossier html/[votre-projet]/class/,
- contrairement à d'autres framework comme "symfony" ces classes ne nécessitent pas d'être étendues d'une classe natif de DWF !
+ Les classes dites "métiers" sont les classes spécifiques à votre projet que vous aurez vous mêmes créé dans le dossier html/[votre-projet]/class/,
+ contrairement à d'autres framework comme "symfony" ces classes ne nécessitent pas d'être étendues d'une classe natif de DWF.
vous êtes libre de lui donner le nom que vous voulez ( sauf un nom déjà pris par une classe native ou une de vos entités)
- libre d'utiliser des "méthodes magiques" tels que les constructeurs, destructeurs ...
+ libre d'utiliser des "méthodes magiques" tels que les constructeurs, destructeurs...
La seule restriction est le nom du fichier qui doit être comme ceci : [nom_de_votre_classe].class.php.
Une fois votre classe créée, vous pouvez l'appeler et l'utiliser dans pages.class.php
- Comme indiqué, ces methodes doivent être en public static, elles peuvent étre utilisées dans n'importe quel classe SAUF les entités !
+ Comme indiqué, ces methodes doivent être en public static, elles peuvent étre utilisées dans n'importe quel classe SAUF les entités.
Ces méthodes ne prennent pas de paramètres et ne retourne rien.
ATTENTION : Depuis la version 21.17.12,
- pour que les methodes évenementielles ce déclenchent, la classe concernée doit avoir été appelée au moins une fois avant le déclencheur !
- (instantiation ou appel d'une méthode statique)
+ pour que les methodes évenementielles se déclenchent, la classe concernée doit avoir été appelée au moins une fois avant le déclencheur.
+ (instanciation ou appel d'une méthode statique)
@@ -327,7 +328,7 @@ private function entity() {
Les entités font office d'ORM dans votre projet,
une classe entité vous permet de lire, ajouter, modifier ou supprimer des entrées de votre base de données sans avoir à saisir une requête SQL
(ormis une eventuelle condition "where" ). Les entités exploitent un objet bdd accessible via application::$_bdd
- les entités seront capable de recréer la structure de leur base de données si celle-ci est perdue (mais ne permettent pas de sauvegarder les données !)
+ les entités seront capable de recréer la structure de leur base de données si celle-ci est perdue (mais ne permettent pas de sauvegarder les données ).
@@ -340,6 +341,8 @@ private function entity() { . " //la structure de l'entité et de sa table dans la base de données\n\n" . " array('id','int',true), //créé un champ/attribut nommé 'id' de type entier,\n" . " //le 'true' indique une clé primaire, le setter de 'id' sera en privé\n" + . " //Depuis la version 21.22.10 cette clé primaire est automatiquement renseigné,\n" + . " //il n'est donc plus nessaicaire de la déclarer dans le code.\n" . " array('login','string',false),\n" . " array('psw','string',false),\n" . ");\n" @@ -442,7 +445,7 @@ private function entity() { private function bdd() { ?>
- L'objet bdd est l'objet qui permet de gèrer la connexion à la base de données et sécuriser les variables destinées à être utilisées dans des requêtes SQL.
+ L'objet bdd est l'objet qui permet de gérer la connexion à la base de données et sécuriser les variables destinées à être utilisées dans des requêtes SQL.
Cet objet utilise les informations PDO qui sont renseignées dans le fichier de configuration.
Vos entités et de nombreuses classes native de DWF exploitent cette objet.
Les services sont des classes PHP qui répondent à des requêtes venant soit de plusieurs de vos propres projets,
soit d'applications extérieures (dans ce dernier cas on peut parler d'API ).
- ces classes doivent être placées dans /html/commun/service
+ Ces classes doivent être placées dans /html/commun/service
En général les services ne retournent pas d'HTML, mais des données au format JSON (recommandé), XML, CSV ou Serialisé
@@ -511,15 +514,15 @@ private function services_general() { . " if (isset($" . "_REQUEST[\"id\"])) {\n" . " //on charge le fichier de config\n" . " include '../../mon_projet/class/config.class.php';\n\n" - . " //on charge les entités (cf. methode plus bas )\n" + . " //on charge les entités (cf. méthode plus bas )\n" . " $" . "this->entityloader();\n\n" - . " //on lance la connexion de la base de donées dans application::$" . "_bdd\n" + . " //on lance la connexion de la base de données dans application::$" . "_bdd\n" . " application::$" . "_bdd = new bdd();\n\n" . " //on utilise l'entité\n" . " $" . "user = user::get_table_ordored_array(\"id='\".application::$" . "_bdd->protect_var($" . "_REQUEST[\"id\"]).\"'\");\n\n" - . " //on enleve le mot de passe des données à retourner\n" + . " //on enlève le mot de passe des données à retourner\n" . " unset($" . "user[$" . "_REQUEST[\"id\"]][\"psw\"]);\n\n" - . " //on affiche le resultat en JSON\n" + . " //on affiche le résultat en JSON\n" . " echo json_encode($" . "user);\n" . " }\n" . " }\n\n" @@ -569,18 +572,18 @@ private function services_interne() {
Ces services sont à placer dans html/[votre-projet]/services/ et les fichiers doivent être nommés tels que : [nom-service].service.php
-Pour que le fichier service/index.php soit créé correctement, la case "Services internes" doit être coché à la création du projet !
+Pour que le fichier service/index.php soit créé correctement, la case "Services internes" doit être coché à la création du projet.
Les CLI sont des script PHP destiné à tourner en mode console,
- très utile pour effectuer des opérations longues telles que des sauvegardes de grosses bases de données par exemple
- ces script sont souvent appelés dans des CRON
+ très utile pour effectuer des opérations longues telles que des sauvegardes de grandes bases de données par exemple
+ ces scripts sont souvent appelés dans des CRON
il existe deux types de CLI dans le Framework :
Ces CLI généraux se trouvent dans le dossier dwf/cli/ et doivent répondre à certaines régles
+Ces CLI généraux se trouvent dans le dossier dwf/cli/ et doivent répondre à certaines règles.
Les CLI métiers sont beaucoup moins contraignants, ils peuvent étre placés dans le dossier "class" de votre projet ou dans un sous-dossier que vous aurez créé
html/[votre-projet]/class/cli par exemple,
il est recommandé (mais pas obligatoire) de nommer le fichier en .cli.php
- ne le nommez pas en .class.php ! ou le CLI rentrerait en interraction avec l'application "web"
+ ne le nommez pas en .class.php. Ou le CLI rentrerait en interraction avec l'application "web"
il est recommandé de charger et utiliser la classe "cli" dans vos CLI métiers, comme ceci :
+
+ Les WebSocket permettent de faire de la communication en temps réel (Real Time Connexion, RTC).
+ L'utilisation première des WebSocket est pour les tchats entre utilisateurs
+ mais ils peuvent aussi être utilisé pour notifier un utilisateur
+ ou afficher une donnée très variable dans le temps en temps réel (exemple : un stock dans une application de gestion)
+
+ Un serveur de WebSocket tourne indépendament du serveur web et écoute son propre port (9000 par défaut dans DWF, parametrable dans la config du projet).
+ il est possible de lancer le serveur en mode console (CLI), notamment pour débugger :
+
En production, il est possible de laisser l'application lancer elle même le serveur de websocket en utilisant la classe services pour lancer une requête qui lancera le serveur :
+ ", $this->_brush); + ?> +L'application ne lancera le serveur qu'une seule fois.
+Coté client, la connexion peut être géré avec l'objet = html_structures::a_link("https://javascript.info/websocket", "JS natif WebSocket", "", "", true) ?>
+ \n" + . " var socket = null;\n" + . " (function start_websocket() {\n" + . " socket = new WebSocket(\"ws://localhost:9000/\");\n" + . " socket.addEventListener(\"open\", function (e) {\n" + . " //cette ligne permet d'authentifier un utilisateur qui serait authentifié sur l'aplication\n" + . " socket.send('{\"action\": \"auth\", \"token\": \"= websocket_server::auth() ?>\"}');\n" + . " });\n" + . " socket.addEventListener(\"close\", function (e) {\n" + . " //retente une connexion toutes les 10 secondes en cas de coupure\n" + . " socket = null;\n" + . " let si_ws_reco = setInterval(function () {\n" + . " if (socket) {\n" + . " start_websocket();\n" + . " clearInterval(si_ws_reco);\n" + . " }\n" + . " }, 10000);\n" + . " });\n" + . " socket.addEventListener(\"message\", function (e) {\n" + . " data = JSON.parse(e.data);\n" + . " //verifie si l'utilisateur est authentifié\n" + . " if (undefined != data.auth) {\n" + . " if (data.auth) {\n" + . " //l'utilisateur est authentifié\n" + . " } else {\n" + . " //l'utilisateur n'est pas authentifié, affiche l'erreur\n" + . " alert(data.message);\n" + . " }\n" + . " }\n" + . " });\n" + . " })();\n" + . "", $this->_brush); + ?> +
+ ATTENTION ! Actuellement DWF ne gère pas le tunnel de chiffreement (SSL/TLS),
+ c'est à vous de le mettre en place via le système de proxy de votre serveur web.
+
+ Les websockets de DWF fonctionnent avec l'envoi et la reception de chaines JSON.
+ dans les chaines d'envoi vers le serveur une clé "action" est obligatoire afin d'indiquer au websocket quel traitement appliquer.
+ le reste des clés sont libre.
+ la seule action définie par défaut et l'action d'authentification qui prend en seconde clé un token d'authentification (qui peut être vide) :
+
Le retour est une des ses possibilité :
+ +Pour rajouter une action, il suffit de rajouter une classe dans le dossier "websocket" du projet qui sera nommé :
+ [nomDeLAction].ws.php
+ et qui doit avoir la forme suivante :
+
La classe websocket_client permet de gérer les utilisateurs connectés,
+ elle possède aussi des méthodes statiques qui permettent de sélectionner d'autres utilisateurs connectés.
+ Gardez en tête qu'un utilisateur peut avoir des connexions multiples (s'il ouvre plusieurs onglets par exemple).
+
Lors de la mise en ligne de vos projets, vous devrez définir votre "projet par defaut" pour cela :
- rendez vous dans le fichier html/commun/config/default.json et modifiez la ligne suivante à votre convenance.
+
Lors de la mise en ligne de vos projets, vous devrez définir votre "projet par défaut" pour cela :
+ rendez-vous dans le fichier html/commun/config/default.json et modifiez la ligne suivante à votre convenance.