En haut ..... 1.4 réseaux ..... 1.3 UML ..... 1.5 dm ..... ide ..... 3. Crud ..... sw fw
Code de module CRUD Code 7 scripts:
Crud le plus simple ..... index.php ..... home_ctr ..... home (page de table) ..... Créer ..... lire (profil utilisateur - formulaire) ..... Mise à jour .... adaptateur
B12PHPFW: développé sur PC domestique sur (le plus récent) Windows 10 64 bits avec XAMPP (Apache Web Server, MARIADB). Testé également sur Windows Oracle Virtual Box Oracle Linux Virtual Machine (Apache Web Server) et sur des sites de démonstration Linux. B12PHPFW est le résultat de 20 ans d'apprentissage du PHP comme passe-temps (mais je n'ai pas d'installations de production).
Voir le flux de code (signaux) et le flux de données ou ici - ne fonctionne pas parce que la limite de temps.
Extrait de FWPHP-Master.zip seulement ~ 300 Ko (le noyau B12PHPFW est inférieur à 100 Ko, avec de nombreux exemples d'apprentissage et images supplémentaires ~ 3 Mo):
(Apache or nginx...) WEB SERVER DOCROOT J:\xampp\htdocs\, my is virtual host J:\awww\www\
│
│
│─I.fwphp (app or SITE1 or APLications1) = Main site dir. fwphp is optional name.
│ └── Contains MODULE GROUPS eg APLication1 or glomodul (under which is www =main menu) :
│ glomodul, finance, material, salary
│ └── They contain MODULES eg www or post under glomodul dir
│
│
│─II.index.php redirects to main menu url : /fwphp/glomodul/www/index.php
│
│
│─III.vendor
│ └── b12phpfw dir = internal resources, external sresources are in other vendor subdirs.
│ Here are class Autoload and other for all sites shared - common - global
│ classes Db_allsites and Config_allsites....
│ └── erusev = external resources
│ └── parsedown = external resources
│ └── simplemde
Télécharger depuis https://github.com/slavkoss/fwphp
Le premier "/" dans les chemins ci-dessous est "j: awww www " = "http: // dev1: 8083 /" = possprowebserver_or_hosting_docroot_path, par exemple "/" dans "/ vendor / b12phpfw"
Dossiers: vendeur (était le zinc, maintenant le zinc n'existe plus, les actions sont dans / vendeur / b12phpfw )
Dans PHPMYADMIN PAGE:
Import dans mon sql j: awww www fwphp glomodul blog_akram 01_phpcms.sql : est d'abord le style d'apprentissage "1a. Globals qui sont utiles pour les grands sites - des centaines de modules).
Later to learn create big sites - hundreds of modules create database z_blogcms , utf8mb4 :
J:\awww\www\z_DDL_and_other\01_DDL_mysql_blog.sql
or in Oracle DB J:\awww\www\z_DDL_and_other\01_DDL_oracle_blog.sql
J: awww www fwphp glomodul adrs est module ADRS - deuxième étape d'apprentissage à côté du module mnu dans j: awww www fwphp glomodul www . ADRS n'est pas un exemple simple, mais ne suffit pas pour apprendre le menu B12PHPFW et le code CRUD Skeleton! Les modules MNU, MKD et MSG! Cela semble compliqué mais ce n'est pas le cas.
La plupart (tous?) Les sources d'apprentissage PHP sur Internet et les livres (Nixon, Powers, Yank, Ullman ...) semblent simples, mais sont à mon avis bien uniquement pour la sintax de base et conduisent à un mauvais codage du menu et du squelette de code crud, donc sont plus compliqués que B12PHPFW! Le livre CMS Duckett 2022 Year est bon pour l'apprentissage du PHP, mais l'exemple CMS n'est pas si bon. C'est l'un des paradoxes de la vie: "Illusion, semblant d'apparence".
MNU - Module de menu dans le dossier FWPHP / www
MKD - Module de gestion de contenu Markdown dans le dossier / FWPHP / GLOMODUL / MKD
MSG - MODULE CRUD MSG-BLOG dans / FWPHP / GLOMODUL / BLOG, ... Utilisateur, ... Post_Category, ... Post, ... Post_Comment (tous dans GlomoDul Dir).
Actuellement 2023.01.15, B12PHPFW version 10.0.0.0 "Même adaptateur de base de données module pour tout adaptateur DB partagé". 10.0.0.0 signifie:
Janvier 2023: Seul le module ADRS fonctionne sur MySQL ou Oracle (11G) DB (pas toutes les fonctionnalités, mais suffisamment pour voir clairement tout ce qui est important). Il n'est pas difficile de mettre à jour l'intégralité du module ADDRS et du module MSG vers la version 10, mais cela prend beaucoup de temps, donc je ne suis pas pressé parce que je pense que j'ai atteint l'objectif du menu et du code squelettique crud B12PHPFW. Beaucoup de temps dans la phrase précédente signifie que les outils SW ainsi que les applications utilisateur nécessitent beaucoup de temps pour terminer si nous changeons quelque chose. Le meilleur exemple de la façon d'éviter cela est le code (global) partagé, par exemple "Adaptateur de base de données du même module pour tout adaptateur DB partagé".
L'objectif de l'outil B12PHPFW PHP SW est, sur la base de plus de vingt ans de travail avec Oracle Forms 6i, pour fabriquer un outil pour les sites Web * .php avec la logique comme Oracle Forms 6i.
Les dossiers MNU, ADDRS ... (modules) sont comme les formulaires Oracle 6i * .fmb et .php sont comme des programmes à l'intérieur de certains .fmb. Je suis convaincu que cette approche est bien meilleure que trois dossiers M, V, C pour toutes les pages ( .FMB) qui me semble être l'œuvre d'auteurs de SW Tools qui n'ont pas assez d'expérience pratique. Ces auteurs ont fait beaucoup de dégâts à notre époque (Microsoft, Oracle, toutes les versions stupides Linux et même Windows).
http: // dev1: 8083 / fwphp / glomodul / adrs /
Remplacez http: // dev1: 8083 par votre adresse Web, par exemple http: // localhost b12 - ouvre la page d'accueil du module ADRS:
Accueil ....... Exemple1 ....... Exemple2 ....... Adresses - Menu principal dans le module (ou site) HDR
Page d'accueil - Titre de la page
- Contenu de la page:
Vous êtes en vue: J: awww www fwphp glomodul adrs home.php
$ pp1-> module_relpath en dessous du site root = fwphp / glomodul / adrs
$ pp1-> module_url = http: // dev1: 8083 / fwphp / glomodul / adrs /
B12PHPFW est différent des autres frameworks (PHP) (menu et squelettes de code crud). Différences principales (grandes):
Chaque module (est comme Oracle Forms6i .FMB) est dans son propre dossier, pas tous les modules en 3 Dirs: M, V, C.
SO J: awww www fwphp glomodul adrs ... mini3 adrs ... nppses
Contient des scripts dans un seul dossier de module ADRS: ADRS.
Les scripts globaux sont dans: J: awww www vendor b12phpfw dossier.
Les espaces de noms sont fonctionnels, pas positionnels (pas Dir Tree qui n'est pas nécessaire, mais Dir est suffisant!).
EG Espace de noms B12PHPFW SITE_HOME www; ou b12phpfw site2_home www (!) ou b12phpfw module adrs
1. B12PHPFW Le module fait partie fonctionnelle de l'espace de noms - ce que fait le script - nous pouvons écrire ici tout ce que nous souhaitons
2. ADRS est un dossier dans lequel se trouve le script (j: awww www fwphp glomodul adrs home_ctr.php, http: // dev1: 8083 / fwphp / glomodul / adrs /)
Logo du site (si vous le souhaitez): dans CSS Background: URL ('data: image / png; base64, ivborw0kggoaa ... qmcc');
- Module (ou site) pied de page:
Il s'agit de Mini3 PHP FW sur B12PHPFW basé sur Mini3 sur GitHub.
Cette page Exemple1 URL (Web Adress - Nom Web) est: http: // dev1: 8083 / fwphp / glomodul / adrs /? I / ex1 / where ex1 est la méthode dans les CL à domicile.
La méthode EX1 inclut cette page = View dont l'addition Oper.
Cette page Exemple2 recevra deux paramètres p1 = 'param1' et p2 = 'param2'. Cette page est incluse avec la méthode Home CLS EX2. Cette URL de page est: http: // dev1: 8083 / fwphp / glomodul / adrs /? I / ex2 / p1 / param1 / p2 / param2 /
Partie importante de la palette de propriétés $ pp1 est uriq = URL (URI) Pièces de requête: [i] => EX2 où Ex2 est la méthode dans Home CLS à appeler qui appelle une méthode ou comprend un script [p1] => param1 Ceci est la méthode (script) Paramètre 1 [P2] => Param2 Ceci est la méthode (script) paramètre 2
Url Get Paramètre P1 = Param1 URL Get Paramètre P2 = Param2
Vous êtes en vue: J: awww www fwphp glomodul adrs example_two.php
Trait db_allsites fonction publique statique rrcnt appelé de "classe tbl_crud" a un problème:
DÉCRÉSÉ: APPELER MÉTHODE DE TAIT STATIQUE B12PHPFW CORE B12PHPFW DB_ALLSITE :: RRCOUNT est déprécié, il ne devrait être appelé que sur une classe en utilisant le trait - les auteurs PHP n'ont pas expliqué ce problème? C'est donc une classe pour l'instant (2022-07-03). (Old Bonne règle: n'utilisez pas les fonctionnalités de langue avancées car les auteurs de langues ne testent pas les changements suffisamment en détail!)
Il y a beaucoup à apprendre sur le module ADRS. Si cela semble difficile, essayez d'abord Mini3. Le module MSG ajoute une fonctionnalité "plus de modules" qui est une programmation réelle, pas facile mais nécessaire.
Sortie de la classe AutoLoad après avoir modifié if ('') {... vers if ('1') {... affiche le flux de code après avoir cliqué sur le bouton "Adresses" ou tout autre lien.
Voir Clean_architecture.md Où est les niveaux de code Image de https://github.com/nazonohito51/clean-architecture-sample.
Essayez l'édition de fichier md: http: // dev1: 8083 / fwphp / glomodul / mkd /? I / showhtml / path / j: awww www clean_architecture.md
Top ...... Dirs ..... Uml ..... DM ..... IDE ..... Crud ..... SW FW
voir https://help.github.com/en/github/writing-on-github https://git-scm.com/book/en/v2
ou par exemple https://git-scm.com/docs/git-checkout
J: Symenu ProgramFiles SPSSuite Symenusuite cmder_sps
Accédez à votre répertoire de travail ou à votre dossier de projet (sinon le statut GIT dit: "Fatal: pas un référentiel GIT (ou l'un des répertoires parents): .git").
git config --global user.name 'yourname'
git config --global --replace-all user.email 'youmail'
Git Config - Local -l Installez Git Credential Manager pour Windows pour éviter la connexion sur chaque poussée - dans les extensions Git CMder (Git Update-git-for-windows)
j: awww www (maître -> origine)
ou git add fwphp (ou tout ce que Git demande) ou git add -a ou git add index.html
Nous avons stocké nos fichiers de projet dans notre disque dur du système.
Si CMDER affiche une erreur "Fatal: Impossible de détecter automatiquement l'adresse e-mail": voir ci-dessus Git Config ...
git config --global user.email "[email protected]" et git config --global user.name "Votre nom"
pour définir l'identité par défaut de votre compte. Omettre --global pour définir l'identité uniquement dans ce référentiel.
Nous avons stocké nos fichiers de projet dans notre site GitHub.
Vous souhaitez restaurer une ancienne révision d'un fichier: Git Checkout 8A7B201 index.html Si vous spécifiez "Head" comme révision, vous restaurerez la dernière version engagée du fichier, annulant effectivement les modifications locales que vous avez actuelles dans ce fichier:
Git Checkout Head index.html
Nous pouvons faire reculer nos fichiers supprimés dans le répertoire de travail à l'aide de la commande:
Git Checkout -.
ou la caisse de Git - Nom de fichier ...
Git est le programme et GitHub est le site - Déployer (livre) Tutoriel
Git nous utilisons par exemple pour syncroniser nos scripts:
À partir du 13 août 2021, GitHub n'accepte plus les mots de passe du compte lors de l'authentification des opérations GIT sur github.com, et nécessite l'utilisation d' une authentification basée sur les jetons , comme un ** Pat, un jeton d'accès personnel sur HTTPS = 40 caractères PSW (recommandé) ** (pour les développeurs) ou une installation de Github ou Github. Vous pouvez également continuer à utiliser les touches SSH où vous préférez.
https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-ata-secure/creting-a-personal-access-token-token
λ Git Remote-V Sorties:
Origin https: // [token] @ github.com / slavkoss / fwphp.git (fetch)
origine https: / [token] @ github.com / slavkoss / fwphp.git (push)
Donc, il ne reste que la dernière validation et elle est d'abord commise:
Enregistrez votre .git / config avant et restaurez-le après. (Je le supprime dans la corbeille).
Mon IDE PHP est Symenu Zip Package en tant que lanceur pour tous les SW répertoriés ci-dessous (Portable si possible):
Plugin Markdown de bloc-notes ++
Copiez TMarkdownViewerPlusplus.dll au sous-dossier des plugins dans votre répertoire d'installation Notepad ++.
Le plugin ajoute une petite icône Markdown à la barre d'outils pour basculer la visionneuse en tant que panneau dockable.
Ensuite, dans les paramètres NPP -> Import -> Importer les plugin (s).
Voir dans j: awww www globals nppsess Fichier et autres fichiers nppSess.
Convertisseurs MD à HTML sur INET:
Aussi bon, tous portables tous dans Symenu: notepad2-mod (2 Mo), atome (524 Mo),
Visual Studio Code (247 Mo), Cudatext (28 Mo), PSPAD (23 Mo), RJ text (416 Mo),
Éditeurs HTML WYSIWYG: Microsoft Expression Web (abandonné mais toujours bon).
J'évite Dreamveawer, Komposer (abandonné, trop vieux).
Commandant :
est vieux mais le meilleur (Janne Huttunen) ou tout similaire, voir Symenu
Meinplatz (x64) (partie des programmes portables Symenu) comme Treesize
ou multicommandant, Q-Dir, Total Commandder ...
NAVIGATEUR :
Google Chrome, Cyberfox, Pale Moon
(dans Symenu) est Win CMD Line, a Git.
Le compositeur vous aide à déclarer, gérer et installer les dépendances des projets PHP.
Client FTP WinSCP . Ignorer: | *.fermeture éclair; J: awww www.git; J: awww www vendor / b12phpfw / dbconn_allsites.php;
FTP Server Symenu's Servra Community
Manuel PHP
Guide de style PHP
Tutoriel PHP par W3Schools
Guzzle est un client HTTP PHP qui facilite l'envoi de demandes HTTP et Trivial à intégrer aux services Web.
DesignPatterNSPHP est une collection de modèles de conception connus et un exemple de code pour les implémenter dans PHP 7.4. Chaque modèle a une petite liste d'exemples.
CMS Portable Portable Flat-File avec un puissant système de gestion des paquets de plugins et thèmes et Grav lui-même.
Guide PHP
_.-'''''-._
.' _ _ '.
/ (o) (o)
| |
| / |
'. .' /
'. ''---'' .'
'-._____.-'
montre la structure des classes - attributs et méthodes
Top ...... Dirs ..... Uml ..... DM ..... IDE ..... Crud ..... SW FW
<?php
// J:awwwwwwvendor/b12phpfwDbconn_allsites.php
// Is required in trait Db_allsites
//$conn_params =
return [
null
, ' mysql '
, ' localhost '
, ' z_blogcms '
, ' root '
, ''
] ; B12PHPFW CODE CODE.
Niveau: tous les sites (même code pour tous les sites partagés, globaux, communs)
( Modèle , abstraitnticité)
Classe DBConn_allSites. Le trait est similaire à la classe . La raison du trait est la structure du code net:
Une classe peut utiliser plus de traits - net - plus de parents, mais ne peuvent prolonger qu'une seule classe - une hiérarchie .
Je n'utilise pas de trait - j'avais un bug comme le code avancé souvent.
// see class script // see class script
Fondamentalement, db_allsites.php read (RR, rapport) fonctionne comme le code dans:
/awww/www/clean_architecture.md. Je l'ai fait dans la version 10 janvier 2023.
B12PHPFW CODE CODE.
Niveau: tous les sites (même code pour tous les sites partagés, globaux)
// see class script // see class script Pour éviter les commandes INC. Dans de nombreux scripts
B12PHPFW CODE CODE.
Niveau: tous les sites (même code pour tous les sites partagés, globaux, communs)
// see class script // see script Code du module B12PHPFW.
Niveau: Module (même code pour le dossier EE du module, par exemple MNU ou MKD ou MSG = blog)
Pour l'exécution du programme, la hiérarchie des classes est: comme si tous les attributs et méthodes dans les classes ci-dessus sont dans la classe home_ctr. C'est-à-dire qu'ils sont dans $ cet objet qui est instancié (créé en mémoire) dans home_ctr (qui semble contenir toutes les classes - descriptions des attributs et des méthodes au-dessus).
Pourquoi les attributs et méthodes partagés (communs) sont-ils dans la hiérarchie au-dessus de home_ctr et non dans home_ctr?
Nous ne voulons pas écrire dans chaque script home_ctr le code partagé (commun) complet au-dessus de home_ctr .
Top ..... Dirs ..... Uml ..... DM ..... IDE ..... Crud ..... SW FW
Voir le code d'information:
http://phporacle.eu5.net/fwphp/glomodul/z_examples/03_info_php_apache_config_scripts.php
https://github.com/slavkoss/fwphp/blob/master/fwphp/glomodul/z_examples/03_info_php_apache_config_scripts.php
B12PHPFW est très différent que (tous?) Autres frameworks PHP (Je préfère "Skeletons de menu et code crud") car:
Les réseaux sont comme Oracle Forms Form Module .FMB https://github.com/ngrt/mvc_todo - très bon codage (mais à un exemple simple, pas de globaux, pas de names espaces ...), montre des frameworks php habituels et une idée de routage: ... GLOMODUL z_examples Rechercher Google: GiTHub PHP Framework
et d'autres raisons mentionnées ci-dessous
Voir Mini3 PHP Framework https://github.com/panique/mini3 qui est excellent rare de ne pas faire d'exemple MVC simple (beaucoup de bon codage). Mon routage à l'aide de valeurs clés est différent, mais la répartition à l'aide de méthodes de classe à domicile est basée sur Mini3 .
B12PHPFW a 3 modules et certains utilitaires:
Top ...... Dirs ..... Uml ..... DM ..... IDE ..... Crud ..... SW FW
Voir en utilisant MKD FWPHP / GLOMODUL / MKD / 02/01_FWPHP / PHP_DIP_DI.TXT
Top ...... Dirs ..... Uml ..... DM ..... IDE ..... Crud ..... SW FW
Peut être jQuery, PHP, bootstrap ajax db Table Rows crud est le meilleur crud le plus simple et le plus rapide mais je ne préfère pas de jQuery, pas d'Ajax. Seul JavaScript dont j'ai besoin est une boîte de dialogue oui ou non.
Crud Rows in Table Song (#id, artiste, piste, lien) . Mini3 Framework https://github.com/panique/mini3 est je pense que je pense mieux pour apprendre le squelette de code PHP et des frameworks. Mon module ADRS dans les modules GlomoDul est Mini3 sur B12PHPFW. Pourquoi ? Je pense que pour les grands sites Mini3 est trop simple - pas de partage ...
Voir les scripts.
Crud le plus simple ..... index.php ..... home_ctr ..... home (page de table) ..... Créer ..... lire (profil utilisateur - formulaire) ..... Mise à jour .... adaptateur
Nous avons besoin d'un seul point d'entrée dans le module pour éviter le désordre avec les liens (https: // ... les liens ne sont pas clairs, mieux sont des incluses et des appels de méthode).
<?php
/**
* J:awwwwwwfwphpglomoduladrsindex.php
*/
. . .
/**
* J:awwwwwwfwphpglomoduladrsindex.php
* DISPATCHING is calling method according URL parts (extracted with ROUTING code).
* Because MODULE METHODS PARAMS ARE MOSTLY GLOBAL (same for all modules), eg paths,
* to avoid lot of same code in modules (code redundancy) :
* 1. WE ASSIGN GLOBALS IN PARENT CONF&UTL CLS METHOD
* (not knowing which module is going to use them)
* 2. THEN, FROM PARENT CLS WE CALL METHOD IN CHILD MODULE CLS.
* Module method knows how to use globals
* and what module needs for parameters beside globals.
*/
/**
* ns (NAMESPACES) we use in clses script autoloading.
* vendor_namesp_prefix processing (behavior) clsdir [ cls] [as clsalias]
* eg B12phpfw is vendor_namesp_prefix ; //FUNCTIONAL, NOT POSITIONAL
* FUNCTIONAL parts are not requirad, we use them to better understand script purpose.
*eg clsdir - only this part of namespace is POSITIONAL, CAREFULLY !
*/
/**
* **HELPNS
* first namespace part B12phpfw is NOT REQUIRED : vendor's name NS's prefix (FUNCTIONAL NSPART)
* 2nd ns part m o d u l e is NOT REQUIRED : FUNCTIONAL NSPART = processing (behavior)
*
* FNSPs (FUNCTIONAL NS PARTS) are ignored by fw, ee we name them as we wish.
* We use FNSPs as description to depict WHAT CODE DOES (processing, behavior).
* May be more functional ns parts as we wish - all are ignored !
*
* PNSP (POSITIONAL NS Part) CAREFULLY! : LAST NS part (BEFORE CLSNAME IF ANY) eg "blog" is DIRNAME.
* PNSP is actually (de facto, in fact, indeedded) DIRNAME and module name.
* Path OF DIRNAME (of PNSP) is in $pp1 array,
* used for Autoload class to include classes from dir DIRNAME.
* Autoload class is include, global, common, reusable.
*/ index.php ..... index.php ..... home_ctr ..... home (page de table) ..... créer ..... lire (profil utilisateur - formulaire) ..... mise à jour .... adaptateur
. . .
* ------------------------------------------------------------------------------
* ROUTING TBL - module links, ( IS OK FOR MODULES IN OWN DIR ) key-keyvalue pairs :
* LINK ALIAS IN VIEW SCRIPT (eg l d d) => HOME METHOD TO CALL (eg del_ row_do)
* ------------------------------------------------------------------------------
* 1. ALL MODULE VIEWS LINKS SHOULD BE IN $ pp1_ module, SHAPED SO :
* 2. $ pp1 -> urlqrystringpart1_name => i/M E T H O D NAME /param1name/ param1value. . . 2 , 3. . .
* (urlqrystring LAST PART IS IN VIEW SCRIPT WHICH KNOWS IT , eg idvalue !)
* 3. IF LINK key-keyvalue pair IS NOT HERE THEN EG :
* in URLurlqrystring : QS . ' i/home/ ' home must be M E T H O D NAME in this script.
* Eg http: //dev1:8083/fwphp/glomodul/adrs/?i/ex1/ or
* http: //dev1:8083/fwphp/glomodul/adrs/?i/home/ or
* http: //dev1:8083/fwphp/glomodul/adrs/
*/
/** *****************************************
* CALL DISPATCH M E T H O D S
* they 1.call other fns or 2.include script or 3.URL call script
* CALLED FROM abstract class Config_ allsites, m ethod __c onstruct
* so: $pp1->call_module_m ethod($akc, $pp1) ;
* $ a k c is m o d u l e m ethod (in MM Home_ ctr, not global fn !!
* because MM Home_ ctr knows akc parameters)
* ******************************************
*/index.php ..... index.php ..... home_ctr ..... ** home (page de table ..... créer ..... lire (profil utilisateur - formulaire) ..... mise à jour .... adaptateur
<!-- J:awwwwwwfwphpglomoduladrshome.php -->
< div class =" container " >
< h1 > Homepage </ h1 >
< p > You are in View: < ?=__FILE__? > </ p >
< p > $pp1- > module_relpath below site root = < ?=$pp1- > module_relpath? > </ p >
< p > $pp1- > module_url= < ?=$pp1- > module_url? > </ p >
< p > Namespaces are FUNCTIONAL, not POSITIONAL (not dir tree). </ p >
< p > Each module (is like Oracle Forms .fmb) is in own folder, not all modules in 3 dirs: M, V, C. </ p >
< p > In CSS background: url('data:image/png;base64,iVBORw0KGgoAA...QmCC'); </ p >
</ div >
<!-- J:awwwwwwfwphpglomoduladrsexample_one.php -->
< div class =" container " >
This page EXAMPLE1 URL (web adress - web name) is :
< h3 > < ?=$pp1- > module_url? > ?i/ex1/ </ h3 >
where ex1 is method in Home cls.
< p >
ex1 method I N C L U D E S this page = view whose oper.system adress is : < ?=__FILE__? > .
</ p >
< p > </ p >
</ div >
<!-- J:awwwwwwfwphpglomoduladrsexample_two.php -->
< div class =" container " >
This page EXAMPLE2 RECIVES TWO PARAMETERS p1='param1' and p2='param2'. < br >
This page is i n c l u d e d with Home cls ex2 method. < br >
This page URL is :
< h3 > < ?=$pp1- > module_url? > ?i/ex2/p1/param1/p2/param2/ </ h3 >
< p > Important part of Property pallette $pp1 is < b > uriq = URL (URI) query parts </ b > : </ p >
[i] = > ex2 where ex2 is method in Home cls to be called which calls some method or includes some script < br >
[p1] = > param1 This is method (script) parameter 1 < br >
[p2] = > param2 This is method (script) parameter 2
</ p >
< p > url GET parameter p1= < ?=$param1? > < br >
url GET parameter p2= < ?=$param2? > </ p >
< p > You are in View: < ?=__FILE__? > </ p >
</ div >index.php ..... index.php ..... home_ctr ..... home (page de table) ..... créer ..... lire (profil utilisateur - formulaire) ..... mise à jour .... adaptateur
<?php
// J:awwwwwwfwphpglomoduladrscre_row_frm.php
. . .index.php ..... index.php ..... home_ctr ..... home (page de table) ..... créer ..... lire (profil utilisateur - formulaire ..... mise à jour .... adaptateur
<?php
//J:awwwwwwfwphpglomoduladrsread_tbl.phpindex.php ..... index.php ..... home_ctr ..... home (page de table) ..... créer ..... lire (profil utilisateur - formulaire) ..... mise à jour .... adaptateur
<?php
// J:awwwwwwfwphpglomoduladrsupd_row_frm.phpSimplestCrud index.php ..... index.php ..... home_ctr ..... home (page de table) ..... Créer ..... lire (profil utilisateur - formulaire) ..... Update .... [adaptateur]
<?php
/**
* J:awwwwwwfwphpglomoduladrsTbl_crud.php
* DB (PERSISTENT STORAGE) ADAPTER C L A S S - PDO DBI
* (PRE) CRUD class - DAO (Data Access Object) or data mapper
* This c l a s s is for one module - does know module's CRUD
* Other such scripts should be (may be not ?) for csv persistent storage, web services...
*
* DM=domain model aproach not M,V,C classes but functional classes (domains,pages,dirs)
* MVC is code separation not functionality !
*/
/**
* (PRE) CRUD class - DAO (Data Access Object) or data mapper
*/
} // e n d c l s T b l_ c r u d
Il n'est pas facile de voir la nécessité d'EG pour que le module utilisateur convertit le code de MVC procédural en MVC OOP avec des espaces de noms et le code de navigation automatique pour la navigation (URL-S, Links) est le même - OOP n'aide pas. Le code de module utilisateur procédural par exemple peut être plus clair et lisible. Alors pourquoi OOP est-il meilleur?
Certains disent: "Est-ce que l'erreur OOP?" - par exemple, manque de réutilisabilité dans la POO - pour obtenir la banane (une méthode ou un attribut), vous obtenez également du gorille tenant la banane et la jungle de Gorilla entière (toutes des classes supérieures avec des dépendances compliquées ).
Par exemple, les interfaces aident à obtenir uniquement des bananes, mais le codage est compliqué - je n'ai trouvé que des exemples de code de travail de talk-talk à ce sujet.
J: awww www vendor b12phpfw db_allsites_intf.php (17 Hits) Ligne 15: fonction publique statique get_or_new_dball (chaîne $ appelle_from = ' inconnu appelant '); Ligne 16: fonction publique statique CLOLBCONN (); Ligne 17: fonction publique statique getDBi (); Ligne 18: fonction publique statique setdo_pgntion ($ new_val); Ligne 22: // 11111 ********************** R FONCTIONS: Ligne 24: Fonction publique statique GET_CURSOR (// Objet $ pp1 // comme Oracle Cursor // Ligne RR 27: Fonction publique statique RRNEXT (objet $ Cursor, Array $ autre = []): Objet; Ligne 29: Fonction publique statique RRCount (String $ TBL, ARRAY $ AUTRER = []): Intatic 31: State (String $ TBL, ARRAY $ $ OUTRE = [ Fonction publique RR_LAST_ID (String $ TBL, Array $ autre = [] ) : int; // Créer une ligne TBL
Ligne 45: // Fonction publique statique Pre_CC_UU (Ligne 56: Fonction publique statique UU ($ TBL, $ FLDS, $ WHERE, $ BINDS = []); ligne 62: // 33333 ********************. $ ph_val_arr): chaîne;
Par exemple, le module de facture fonctionne avec deux tables: facture et invoice_items (ou trois tables: bill, facture, invoice_items). SimMilar "Solution la plus simple" Trois Dirs M, V, C sont mauvais - :) - 3DIRS Lovers Put Coding Technik (M, V, C Code Séparation) dans Pages Foregound à la place (fonctionnalité, logique métier).
RR Banana n'est plus dans la jungle, gorille et jungle n'est qu'une classe abstraite config_allsites qui est de facto $ pp1 = propriétés.
Banana $ pp1 = La palette des propriétés peut entraîner des difficultés de modules agrégées (composé, composé, multiplex) comme le blog, la facture ... mais $ pp1 est inévitablement (imminence, nécessité) gorilla-jungle et ne peut pas être encore plus simplifié. J'ai travaillé 20 ans en $ PP1 et Globals Jungle (Oracle Forms 6i) pas aussi bien ancré que voici.
Voir https://phpthewrongway.com/, ou Joe Armstrong Pourquoi OOP suce http://harmful.cat-v.org/software/OO_Programming/Why_oo_Sucks.
B12PHPFW est basé sur des idées dans de nombreux tutoriels Par exemple, quelques prochains sont parmi les meilleurs (mais aussi sur certaines idées dans les meilleurs cadres PHP Laravel, Simfony, Yii, Phalcon ...).
J'ai fait du code B12PHPFW beaucoup plus simple basé sur des idées dans Jazeb Akram CMS Blog - Pages Design et Mini3 PHP FW - Code Skeleton , routage. Les livres sur les exemples de code PHP ne sont pas si bons.
Vidéo du blog CMS (7,7 Go) Jazeb Akram: Udemy - Le cours professionnel PHP MySQL complet avec 5 projets - Rare Not To Simple Tutorial . Similaire est la vidéo (12,3 Go) EDWIN_DIAZ_PHP pour les débutants - Devenez un projet PHP Master - CMS. Aussi quelques autres vidéos - il semble donc que ce sont des conceptions de pages les meilleures / simples (pas des squelettes de code) pour les articles EE du blog CMS, les messages. Les vidéos sont énormes pour des raisons commerciales d'atteindre NUM_OF_GB EE $ / GB, mais il n'y a pas de meilleur code - il y a un style de programmation plus ancien.
Mini3 (mini3 php fw https://github.com/panique/mini3 - rare pas à un module de table simple mais pourrait avoir plus de fonctionnalité.
/ GlomoDul / Z_Examples / MVC_FW / HCSTUDIO_EASY / PUBLIC / TO Simple FW Exemple mais bon code pour apprendre PHP (lecture uniquement de CRUD), a expliqué Middleware . Pour compliquer le routage et le middleware, donc ce n'est pas facile!
https://github.com/ngrt/mvc_todo Le code est expliqué dans cet article Blog 2017.12.17: https://medium.com/@noufel.gouirhate/create-your-own-mvc-framework-in-php-af7bd1f0ca19
https://dev.to/jorgecc/a-minimalist-mvc-project-using-php-and-without-a-framework-4pd8
https://github.com/trpb/immutablemvc
Autre :
J'ai apporté de nombreux changements (j'espère que j'ai fait des améliorations) que je n'ai pas fait parce que je n'aime pas les solutions proposées dans les meilleurs cadres PHP et dans les sources d'apprentissage mentionnées ci-dessus (en particulier le codage par exemple le didacticiel Traversy). Les actions (réutilisables, globales, incluse) ne sont pas bien expliquées et codées là-bas.
Je pense que cela devrait être simple / rapide / professionnel: partage , routage, dispositif, espaces de noms fonctionnels et charges de classes, montage de texte riche en Web ...
C'est pourquoi j'ai passé tant d'heures à ce sujet (énorme gaspillage qui devrait faire des auteurs d'outils-logiciels, pas des utilisateurs d'outils-logiciels comme moi).
Ce squelette de code semble compliqué par rapport à https://github.com/panique/***mini3*** qui est peut-être le meilleur modèle de code FW pour les petits projets (et l'apprentissage de PHP).
Pour les grands projets partage - Globals - les réutilisables que j'utilise ici sont très importants, comme les modules dans les propres dossiers (pas tous dans seulement 3 DIRS M, V, C) .
À propos des actions (globales) Voir discussion:
https://medium.com/@sameernyaupane/php-software-architecture-part-1-mvc-1c7bf042a695
https: //medium.co## 3.2m/@sameernyaupane/php-software-architecture-part-2-the-alternatif-1bd54e7f7b6d
https://blog.ircmaxell.com/2014/11/alternatives-to-mvc.html
Au cours de l'année hivernale 2019/2020 (beaucoup à tardif parce que j'ai testé ce que les autres ont fait), j'ai fait la version 6. De menu et crud php code squelette (propre framework nommé "B12PHPFW") - le code de base est ~ 50 kb. Version 7 .: PHP 7 et Trait DBI est en octobre 2020.
Pourquoi ? Je n'aime pas les solutions proposées dans les meilleurs cadres PHP (Laravel, Simfony, Yii ...) et les sources d'apprentissage (Internet, livres). Je pense que le code PHP de facture du module EG devrait être dans son propre dossier comme Oracle Forms Form FoWing.fmb (pas tous les formulaires / rapports dans 3 dossiers: m, v, c). Je pense que cela devrait être simple / rapide / professionnel: globaux , routage, jetant, chargement des cours, édition de texte riche en Web - c'est pourquoi j'ai perdu plusieurs heures à codage mon B12PHPFW (énorme longe de temps qui devrait faire des auteurs de logiciels, pas des programmateurs d'utilisateurs SW comme moi).
Pourquoi je n'aime pas les solutions proposées et ce que j'ai fait pour (j'espère) les améliorer. Les caractéristiques de couleur rouge sont les principales raisons de B12PHPFW, mais j'ai également amélioré d'autres fonctionnalités. :
TraversyMVC (VIDEO) et MINI3 sont simplifiés, avec certaines (beaucoup?) Des différences par rapport à Laravel, Simfony, Yii, Falcon ... B12PHPFW sont beaucoup plus différentes - voir des caractéristiques de couleur rouge. PHP framework authors do not show such fitures table, for me it is hiding fitures (sell cat in bag).
| Fonctionnalité | B12phpfw | Mini3 MVC PHP fw and TraversyMVC |
|---|---|---|
| 1. Modules in own folder like Oracle Forms .fmb | has - it is one of main reasons for B12phpfw ! | has not all forms/reports in 3 dirs: M,V,C |
| 2. Name spaced classes (functional name spacing) | a | Mini3 which is in my opinion better than TraversyMVC : https://github.com/panique/mini3 has name spaced classes. TraversyMVC blog has not |
| 3. Number of folders (my opinion) | optimal | to many |
| 4. Minimal PHP code to learn (medium) PHP (my opinion) | optimal (but we could add additional code) | good but not enough eg see WYSIWYG, globals... |
| 5. Functional methods, attr. etc naming (my opinion) | bien | could be better |
| 6. Global classes, methods etc (my opinion) | good see below CRUD test output | mauvais |
| 7. (Posts edited with any) WYSIWYG editor | a | has not |
| 8. Home_ctr or Home_mdl CRUD layer methods do not know for underlaying Db_allsites layer PDO methods, MySql, Oracle... | has much improved | has not |
| 9. OOP | a | has like Mini3 |
| 10. namespaces (own PSR-4 (or Composer's) autoloading classes scripts) | amélioré | Mini3 has, TraversyMVC blog has not |
| 11. All scripts are included (ee no http jumps except some jumps in other module) | a | Mini3 has, B12phpfw took it from Mini3, TraversyMVC blog has not |
| 12. jQuery only for Bootstrap 5 | Oui | Mini3 has own CSS, TraversyMVC blog has |
| 13. AJAX, JSON | has not | Mini3 has basic jQuery AJAX explained, TraversyMVC blog has |
| 14. server side validation | a | a |
| 15. authentification (log in / out) | a | has not, TraversyMVC blog has |
| 16. authorization (only logged in users may execute some code ee CRUD code...) | a | Mini3 has not, TraversyMVC blog has |
| 17. Own debugging very simple and useful : msg in pre tag or popup JS msg). xdebug also helps. | a | has not |
| 18. PHP code here is good for (more) large sites | Oui | Non |
| 19. multilanguage pages | has, see https://github.com/slavkoss/fwphp/tree/master/fwphp/glomodul/z_examples/multilang/ | has not |
| 20. DM (Domain model) | has, simplest possible, no complicated namespaces, interfaces, adapters, data mappers... see https://github.com/slavkoss/fwphp/tree/master/fwphp/glomodul/z_examples/02_MVC/03xuding_glob | has not |
(Apache or nginx...) WEB SERVER DOCROOT J:\xampp\htdocs\, my is virtual host J:\awww\www\
│
│
│─I.fwphp (app or SITE1 or APLications1) = Main site dir. fwphp is optional name.
│ └── Contains MODULE GROUPS eg APLication1 or glomodul (under which is www =main menu) :
│ glomodul, finance, material, salary
│ └── They contain MODULES eg www or post under glomodul dir
│
│
│─II.index.php redirects to main menu url : /fwphp/glomodul/www/index.php
│
│
│─III.vendor
│ └── b12phpfw dir = internal resources, external sresources are in other vendor subdirs.
│ Here are class Autoload and other for all sites shared - common - global
│ classes Db_allsites and Config_allsites....
│ └── erusev = external resources
│ └── parsedown = external resources
│ └── simplemde
One of (Apache) WEB SERVER DOCROOT-s, my is J:\awww\www\
|
|
|-- **I. fwphp** (app) # **or SITE1, or APLications1** = Main MVC site dirs structure,
| | # my J:awwwwwwfwphp = Apache_docrootfwphp
| | # Contains **MODULE GROUPS** eg APLication1 or **www** (main menu), **glomodul**,
| | # **finance**, **material**. fwphp is optional name. Namespace is only one: B12phpfw.
| |-- ~~Controllers~~ # **NO M,V,C dirs but dirs are like Oracle FORMS form module.fmb !**
| └── ~~example.php~~ # NO Example Controller
| |
| |
| |-- ~~Models~~ # **NO M,V,C dirs** ee NO Models directory
| └── ~~example.php~~ # Example Model with functionality explanation
| |
| |
| |--~~Views~~ # **NO M,V,C dirs** ee NO Views directory, no template engines (PHP is template language)
|
|
| |-- ~~app.php~~ # **NO** Main fw file. nice abstraction (questionable value in real life programming) :
| | # **$app = new App(); $app->autoload(); $app->config(); $app->start();**
| | # Where is UML diagram for this beauty ?
| | # I think much better is **new Home_ctr($pp1) ** // Home_ ctr "inherits" index.php
| | # ee "inherits" $pp1, (global & module prroperties palette array),
| | # but also inherits see B12phpfw core UML diagram below. .
| |
| |-- ~~classes~~ # **NO** classes directory for autoloading.
| | | # B12phpfw global classes are in vendor/b12phpfw dir, module clses are in module dir.
| | └──-- ~~controller.php~~ # **NO** but **in module dir global abstract DISPATCHER (RESPONSE) class**
| | | # **Home_ctr ** extends Config_allsites
| | |--~~model.php~~ # **NO, no model class for each table** but **in vendor/b12phpfw** dir
| | # global abstract CRUD class **Db_allsites ** includes Dbconn_allsites
| | # In Db_allsites are **cc, rr, uu, dd methods** instead model class for each table !
| | # cc, rr, uu, dd methods are like Oracle Forms
| | # pre-insert, pre- and execute- query, pre-update instead model class for each table !
| | # To me seems not needed : model class for each table and ORM-s, active records
| |
| |-- ~~config~~ # **NO** config dir but in vendor/B12phpfw dir
| | | # **Config_allsites** extends Db_allsites (see core UML diagram).
| | | # Here is property palette array.
| | |-- ~~database.php~~ # = in vendor/b12phpfw **Dbconn_allsites.php**
| | |-- ~~session.php~~
| |
| |-- ~~helpers~~ # **NO** helpers dir, but classes Db_allsites and Config_allsites.
| |-- ~~examplhelper.php~~ # **NO** but own debugging (and Xdebug php extension - I do not use it any more).
|
|
|-- **II. index.php** # redirects to main menu url fwphp/www/index.php
|
|
| |-- **III. vendor **
| |--**B12phpfw** # B12phpfw has own (internal) resources here, external in other vendor subdirs.
| # Here are **class Autoload and other for all sites shared - common - global**
| # **classes** Db_allsites and Config_allsites....
|
|-- .htaccess # **NO** .htaccess (Apache mod_rewrite) URL rewriting all requests to MVC endpoint
# index.php (single module entry point). B12phpfw has **QS=?** constant instead.
Common fw dir structure are items in marked with NO - are not used in B12phpfw but basics are same. B12phpfw is better for large sites.
Top......Dirs.....UML.....DM.....IDE.....CRUD..... SW fw
For me SW fw is a few tens (hundreds) of code snippets for ctrl+c,v (global code snippets don't even need ctrl+c,v, so they are highly desirable).
See "What is SW fw (Software framework)" (using mkd in fwphp/glomodul/mkd/02/01_fwphp/ PHP_DIP_DI.txt/ ) which states :
Code flow terms : DI is about code flow tie - wiring , IoC is about code flow direction , and DIP is about code flow shape .
To be sure, use DI or IoC with DIP.
B12phpfw means: B=table rows blocks for CRUD like in Oracle Forms eg invoice.fmb master (B1) and detail rows (B2).
12 = steps of code flow must be clear, good explained. cs01 means code flow step 1.
phpfw = PHP framework = code skeleton for menus & CRUD (and many other functionalities,
I never understood enough fw authors explanations which is one of reasons why I do not believe them).
Code is small and simple but needs :
few hours (advanced user) - days (intermediate) - weeks/months (beginner) to understand it.
Understand code is must for any good code skeleton !
Clean code : "Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Martin Fowler).
When you are dead, you don't know that you are dead. It is difficult only for the others. It is the same when you are lazy (or stupid).
"Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live." (John Woods). adapter "Clean code reads like well-written prose" (Grady Booch). Good code reads close to natural speech.
Naming is the best tool we have to express what we do in code (avoid comments). Classes and variables are nouns: Price, CurrentTrade. Booleans are predicates: isScheduled, isRunning. Methods should start with a verb: getStrategyResult, createStrategyResult. Common naming errors : Very small names ( $tr, dd() ), Names that are not real words ($dgrtty), Methods that are nouns.
Notable package does something special, is also frequently innovative.
I developed B12phpfw in my free time (my work for last 20 years was : Oracle Forms & Reports 6i and Crystal reports. We wanted migrate them to PHP - never happend
because I cound not find near so good tool as abandoned Oracle Forms 6i - shame. See also below "...compared to all PHP frameworks...".
B12phpfw is good for developing large sites (more of them under web server root dir. path).
Innovative is :
Compared to all PHP frameworks and learning sources :
Based on best PHP learning code I could find. See [web server root dir. path]fwphp/glomodul/z_examples, where :
Conclusion : B12phpfw is most useful for CRUD in msg-blog and simmilar modules, so it is precisely B12phpCRUDfw . For mnu and mkd markdown WYSIWYG editor and simmilar modules we do not nead B12phpfw code skeleton, but I did it.
Includes and method calls instead URL jumps (http// jump to pages) - this is interesting question. http// jump to pages in B12phpfw is used only to jump somethimes in other module.
It is a shame that Oracle does not support the latest client-server SW Forms6i (replacement for the infamous Power objects) and Reports6i, but only the WEB version, which has repeatedly changed some basic functionalities (incompatibilities as with Microsoft tools) and which, for smaller companies, has too many flaws . Why does the WEB version of F6i, R6i not generate something like razor code or PHP code that do not need several servers and have no problem with large Java libraries, with starting... (The simplest Blazor form (#ID, name) is ~ 6 MB, PHP form 6 kB !)
Mr. Ferrante says "strongly discourage" which means "with the lure of Power objects, F6i, R6i..." we have hooked you on expensive and for smaller businesses inappropriate SW.
Is this the reason why very few developers start new projects with Oracle Forms, the transition from Oracle to Java, APEX (declarative programming with attributes - can clicking be done seriously!?) . These are harmful wanderings similar to those of Microsoft, which is unable to explain the basics of, for example, Blazor without killing several months of hard work for a student?
Do Microsoft, Oracle and other manufacturers of SW tools have anyone from real life who can save us from their children's games?
Any systematic work is (at first) very difficult . For example, high officials do not work systematically. The proof is incompatible SW tools, world crises (robbery of savings by inflation, printing money), crimes of inhuman predators like Hitler, Milošević, Putin, some religious high officials and their "brainwashed" believers (kill dissenters, mask women, ban their education and some other rights, for example abortion because of the imbecile idea that the fetus should be preserved at the cost of killing both the mother and the child through poverty - let them support the unwanted child and no one will ask for an abortion). In an orderly, non-anarchic society of educated people, such non-humans would not come to power. Voters do not recognize high officials who work unsystematic, ie they are not aware that by not going to the polls or by electing always the same incompetent / liars / thieves they are working against themselves, ie through ignorance / stupidity they fall prey to intense brainwashing by propagandists and commit a kind of suicide. Vote for someone else so that we don't always get squeezed by the same mafia octopuses of incompetent / lying / thieving high officials.
We have to look at the whole - all the (main) functions of the code , but PHP learning resources are more self-advertising to make money, not teaching all the (main) functions of the code. I wish Microsoft Oracle, PHP "experts - ha,ha" and others would teach (eg Blazor) the way I teach PHP here . Who can understand many megabytes of inexplicable inclusions? If something goes wrong look for an error in many megabytes of code? It's child's play for me, as complicated as Oracle Forms after the last client-server version of 6i. Installing, calling and maintaining servers is an (inexplicable) science. The post-6i call pattern is replaced by Oracle every few years with an incompatible one (problem: huge Java core library!). Microsoft's development tools, like Oracle's, are incompatible and some have been abandoned like Oracle Forms 6i.
Fait :
I not intend to do :
Difficult parts are :
version 8.0.0.0 means (https://semver.org/) :
November 2021. Current version code is 8. Msg module version 8 is not finished, but is visible what should be done during next few months (Mkd ver. 8 was finished in half hour, Mnu simmilar, Msg needs much more time because of bootstrap 5, improve CRUD sintax...).
See http://phporacle.eu5.net/ (freehostingeu - fast, stable, has free MySQL) how it should work.
What's new in version 8.1.0.0 :
User (TODO: or any) module may be caled from blog module so http://dev1:8083/fwphp/glomodul/blog/?i/home/p/1/ -> login -> tables (dashboard) ->admins
but also independent of some compound module so : http://dev1:8083/fwphp/glomodul/user/ .
What's new in version 8.0.0.0 :
2021.08.28 ver 7.0.5 : I added folder (module) WEBSERVERROOT/fwphp/glomodul/img_gallery
J:awwwwww is my WEBSERVERROOT.
J:awwwwwwfwphp is MYDEVSITEROOT1. You may have more MYDEVSITEROOT2, 3... See how in WEBSERVERROOT/index_laragon.php script.
glomodul is group of folders - modules which are not 01mater or 02financ or 03... glomodul may be named othermodules.
img_gallery module is first lesson about (theory behind) code skeleton (application architecture) B12phpfw
2020.09.30 DONE version 7.0.0.0 1. declare(strict_types=1) ; - PHP 7 2. DBI improved : trait Db_allsites instead class Db_allsites. 3. Each DB table (persistent storage) has adapter class Tbl_crud : which uses B12phpfwcorevendor/B12phpfwDb_allsites and implements Interf_Tbl_crud This means that : 1. Module's views or ctrs, eg blog module (see blog folder) work much easier with more Tbl_crud, ee with own Tbl_crud and with other tables Tbl_crud's. 2. class Home_ctr extends class Config_allsites. ( Logically all is in Home_ctr ).
2020.09.05 DONE On Linux demo sites : some PHP statement works different than on Windows (about dozen incompatibilities), eg links do not work in msg module, but work in mnu and mkd modules) : DONE in wsroot_pathvendor/b12phpfwConfig_allsites.php :
Error on Linux not on Windows : $REQUEST_URI = filter_input(INPUT_SERVER, 'REQUEST_URI', FILTER_SANITIZE_STRING);
No error on both OS : $REQUEST_URI = filter_var($_SERVER['REQUEST_URI'], FILTER_SANITIZE_URL) ;
I use xampp-portable-windows-x64-8.1.5-0-VS16.7z 92 Mb or newer on newest Windows 10, 64 bit. No more : Laragon portable laragon.7z, 19 MB. No more WAMP because is not fully portable, Composer needs coding displayed below and it is only for Windows. It seems WAMP and Laragon not giving newest/simplest solutions as xampp does.
WAMP does not like PHP in Windows PATH variable, so :
1. I installed Composer-Setup.exe and removed PHP from PATH.
2. **C:composercomposer7.bat** :
```
@echo OFF
:: in case DelayedExpansion is on and a path contains !
setlocal DISABLEDELAYEDEXPANSION
J:wamp64binphpphp7.2.9php.exe "%~dp0composer.phar" %*
```
Save file along with the originally installed composer.bat file.
3. Now call the php7 composer with the new command:
```
In Windows CLI, cd J:awwwwww and as admin :
composer7 selfupdate (1.8.4, 2019-02-25, Use composer self-update --rollback to return to version 1.7.3)
composer7 update
```
https://kevinsmith.io/modern-php-without-a-framework/
https://github.com/PatrickLouys/no-framework-tutorial
https://github.com/mmeyer724/Frameworkless
https://symfony.com/doc/current/create_framework/index.html
http://dev1:8083/fwphp/glomodul/mkd/?edit=001_MDcheatsheet.txt
http://dev1:8083/fwphp/www/
http://dev1:8083/fwphp/glomodul/mkd/?edit=01/001_db/01_oracle_DB_18c_instalac.txt
http://dev1:8083/fwphp/glomodul/mkd/?edit=01/001_db/02_oracle_APEX_20_1_instalac.txt
http://dev1:8083/fwphp/glomodul/mkd/?edit=01/001_db/03_1oracle_apex_sales_module.txt
http://dev1:8083/fwphp/glomodul/mkd/?edit=01/001_db/03_2oracle_apex_sales_apl_cloud.txt
http://dev1:8083/fwphp/glomodul/mkd/?edit=01/001_db/devsuite10g_instalac.txt
http://dev1:8083/fwphp/glomodul/mkd/?edit=01/001_db/devsuite10g_F6i_to_apex.txt
http://dev1:8083/fwphp/glomodul/mkd/?edit=01/001_vbox/001_instalac_moj_vbox_oralin76.mkd
http://dev1:8083/fwphp/glomodul/mkd/?showhtml=J:/awww/www/readme.md
Top.....Dirs.....UML.....DM.....IDE.....CRUD.....SW fw
SimplestCRUD index.php.....index.php.....Home_ctr.....home (table page).....create.....read (user profile - form).....update....adapter
See http://dev1:8083/fwphp/glomodul/mkd/?i/edit/path/J:awwwwwwreadme_thoughts.md for my earlier thoughts.