Arriba ..... 1.4 Dirs ..... 1.3 uml ..... 1.5 dm ..... ide ..... 3. Crud ..... SW FW
Código de ejemplo de módulo CRUD 7 Scripts:
Crud más simple ..... Index.php ..... Home_ctr ..... Inicio (página de la tabla) ..... Crear ..... Read (Perfil de usuario - Formulario) ..... Actualización .... Adaptador
B12PHPFW: desarrollado en la PC en el hogar en Windows 10 de 64 bits (más nuevo) de 64 bits con XAMPP (Apache Web Server, MariadB). Probado también en Windows Oracle Virtual Box Oracle Linux Virtual Machine (Apache Web Server) y en sitios de demostración de Linux. B12PHPFW es el resultado de 20 años de aprendizaje de PHP como hobby (pero no tengo instalaciones de producción).
Consulte el flujo del código (señales) y el flujo de datos o aquí, no funciona porque el límite de tiempo.
Extracto de FWPHP-Master.zip solamente ~ 300 kb (el núcleo B12PHPFW es inferior a 100 kb, con muchos ejemplos e imágenes de aprendizaje adicionales ~ 3 mb):
(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
Descargar desde https://github.com/slavkoss/fwphp
Primero "/" en las rutas a continuación está "J: awww www " = "http: // dev1: 8083/" = ownwebserver_or_hosting_docroot_path, por ejemplo, primero "/" en "/proveor/b12phpfw"
Carpetas: proveedor (era zinc, ahora zinc no existe, las acciones están en /proveedor /b12phpfw )
En la página de PhpMyadmin:
Importar en mi sql j: awww www fwphp glomodul blog_akram 01_phpcms.sql : es primer paso de aprendizaje "1a. msg mysql" en la página del menú principal - estilo de programación más antiguo pero suficiente si solo queremos módulo de blog (no es necesario para OOP - classs - Autoloaders - Enrutamiento - Visaje, envío, b12phpfwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww son útiles para sitios grandes, cientos de módulos).
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 es el módulo ADRS - segundo paso de aprendizaje al lado del módulo mnu en j: awww www fwphp glomodul www . ADRS no es un ejemplo simple, pero no es suficiente para aprender el menú B12PHPFW y el esqueleto del código CRUD. ¡Lo suficiente a los módulos de aprendizaje simples son los módulos MNU, MKD y MSG! Parece complicado pero no lo es.
La mayoría de las fuentes de aprendizaje de PHP (¿todas?) En Internet y libros (Nixon, Powers, Yank, Ullman ...) parecen simples, pero en mi opinión son buenas solo para una sintax básica y conducen a una codificación incorrecta de esqueleto de código de menú y Crud, ¡así que son más complicados que B12PHPFW! Libro CMS Duckett 2022 Year es bueno para aprender PHP, pero el ejemplo de CMS no es tan bueno. Es una de las paradojas de la vida: "Ilusión, apariencia de apariencia".
MNU - Módulo de menú en /fwphp /www carpeta
MKD - Módulo de administración de contenido de Markdown en la carpeta/fwphp/glomodul/mkd
MSG - Módulo de bloqueo de msg CRUD en/fwphp/glomodul/blog, ... usuario, ... post_category, ... post, ... post_comment (todo en glomodul dir).
Actualmente 2023.01.15, B12PHPFW versión 10.0.0.0 "El mismo adaptador DB de módulo para cualquier adaptador DB compartido". 10.0.0.0 significa:
Enero de 2023: solo el módulo ADRS funciona en MySQL o Oracle (11g) dB (no todas las funcionalidades, pero lo suficiente como para ver claramente todo lo importante). No es difícil actualizar todo el módulo AdDRS y el módulo MSG a la versión 10, pero lleva mucho tiempo, por lo que no tengo prisa porque creo que he logrado el objetivo del menú y el código de esqueleto Crud B12PHPFW. Mucho tiempo en la oración anterior significa que las herramientas SW y las aplicaciones de usuario requieren mucho tiempo para terminar si cambiamos algo. El mejor ejemplo de cómo evitar esto es el código compartido (global), por ejemplo, "el mismo adaptador DB del módulo para cualquier adaptador de DB compartido".
El objetivo de la herramienta B12PHPFW PHP SW es, basada en más de veinte años de trabajo con Oracle Forms 6i, hacer una herramienta para los sitios web *.php con la lógica como Oracle Forms 6i.
MNU, ADDRS ... Las carpetas (módulos) son como Oracle Forms 6i *.fmb y .php son como programas dentro de algunos .fmb. Estoy convencido de que este enfoque es mucho mejor que las tres carpetas M, V, C para todas las páginas ( .fmb), lo que me parece trabajo de autores de herramientas SW que no tienen suficiente experiencia práctica. Tales autores han causado mucho daño en nuestro tiempo (Microsoft, Oracle, todas las versiones estúpidas de Linux e incluso Windows).
http: // dev1: 8083/fwphp/glomodul/adrs/
Reemplace http: // dev1: 8083 con su dirección web, por ejemplo, http: // localhost b12 - abre la página de inicio del módulo ADRS:
Inicio ....... Ejemplo1 ....... Ejemplo2 ....... direcciones - Menú principal en el módulo (o sitio) HDR
Página de inicio -Título de la página
-contenido de la página:
Estás a la vista: J: awww www fwphp glomodul adrs home.php
$ PP1-> MODULE_RELPATH debajo del sitio root = fwphp/glomodul/ADRS
$ PP1-> MODULE_URL = http: // dev1: 8083/fwphp/glomodul/adrs/
B12PHPFW es diferente de otros marcos (PHP) (esqueletos de código de menú y Crud). Diferencias principales (grandes):
Cada módulo (es como Oracle Forms6i .fmb) está en carpeta propia, no en todos los módulos en 3 Dirs: M, V, C.
Entonces J: awww www fwphp glomodul adrs ... mini3 adrs ... nppses
Contiene scripts en una sola carpeta del módulo ADRS: ADRS.
Los scripts globales están en: j: awww www vendor b12phpfw carpeta.
Los espacios de nombres son funcionales, no posicionales (no un árbol directo que es innecesario, ¡pero Dir es suficiente!).
Por ejemplo, espacio de nombres b12phpfw site_home www; o b12phpfw site2_home www (!) o b12phpfw módulo adrs
1. B12PHPFW MODULE es una parte funcional del espacio de nombres, lo que hace el script - podemos escribir aquí lo que deseemos que deseemos
2. ADRS es una carpeta en la que el script es (j: awww www fwphp glomodul adrs home_ctr.php, http: // dev1: 8083/fwphp/glomodul/adrs/)
Logotipo del sitio (si lo desea): en el fondo CSS: URL ('Datos: Imagen/PNG; Base64, Ivborw0kggoaa ... QMCC');
-Pie de módulo (o sitio):
Este es Mini3 Php FW en B12PHPFW basado en Mini3 en GitHub.
Esta página Ejemplo1 URL (Nombre web - Nombre de la web) es: http: // dev1: 8083/fwphp/glomodul/adrs/? I/ex1/where EX1 es el método en Home CLS.
El método EX1 incluye esta página = Vista cuya dirección de sistema Oper.System es: J: awww www fwphp glomodul adrs ejemplo_one.php.
Esta página Ejemplo2 Recibe dos parámetros p1 = 'param1' y p2 = 'param2'. Esta página está incluida con el método Home CLS EX2. Esta URL de la página es: http: // dev1: 8083/fwphp/glomodul/adrs/? I/ex2/p1/param1/p2/param2/
Parte importante de la propiedad Pallette $ PP1 es Uriq = Url (URI) Piezas de consulta: [i] => EX2 donde EX2 es el método en Home CLS que se llamará que llama a algún método o incluye algún script [p1] => Param1 Este es método (script) Parámetro 1 [p2] => param2 este método (script) parámetro 2
URL Get Parameter P1 = Param1 URL Get Parameter P2 = Param2
Estás a la vista: J: awww www fwphp glomodul adrs example_two.php
Rasgo db_allsites función pública estática rrcnt llamado desde "class tbl_crud" tiene problema:
Deprecido: Llamar método de rasgo estático b12phpfw core b12phpfw db_allsites :: rrCount está en desuso, solo debe llamarse en una clase utilizando el rasgo: los autores PHP no explicaron este problema? Entonces es clase por ahora (2022-07-03). (Vieja buena regla: ¡no use características de lenguaje avanzado porque los autores del lenguaje no prueban los cambios con suficientes detalles!)
Hay mucho para aprender sobre el módulo ADRS. Si parece difícil, intente el primer mini3. El módulo MSG agrega la funcionalidad de "más módulos" que es una programación de la vida real, no es fácil pero es necesaria.
Salida de la clase AutOload después de cambiar if ('') {... a if ('1') {... Muestra el flujo de código después de hacer clic en el botón "Direcciones" o en cualquier otro enlace.
Ver Clean_architecture.md donde está la imagen de los niveles de código de https://github.com/nazonohito51/clean-architecture-sample.
Pruebe Editar archivo MD: http: // dev1: 8083/fwphp/glomodul/mkd/? I/showhtml/path/j: awww www clean_architecture.md
Arriba ...... dirs ..... uml ..... dm ..... ide ..... crud ..... sw fw
Vea https://help.github.com/en/github/writing-on-github https://git-scm.com/book/en/v2
o por ejemplo, https://git-scm.com/docs/git-checkout
J: Symenu ProgramFiles Spssuite Symenusuite CMDER_SPS
Vaya a su directorio de trabajo o carpeta del proyecto (si no, el estado de GIT dice: "Fatal: no un repositorio Git (o cualquiera de los directorios principales): .git").
git config -user.name.name 'YourName'
git config--global-replace-all user.email 'YourEmail'
Git Config-Local -L Install Git Credential Manager para Windows para evitar iniciar sesión en cada empuje-en CMDER GIT Extensions (Git Update-git-for-Windows)
J: awww www (maestro -> origen)
o Git Agregar fwphp (o lo que sea que solicite) o git agregar -a o git agregar index.html
Almacenamos nuestros archivos de proyecto dentro de nuestro disco duro del sistema.
Si CMDer muestra el error "FATAL: no se puede detectar la dirección de correo electrónico de detección automática": consulte la configuración de Git anterior ...
git config -global user.email "[email protected]" y git config -global user.name "su nombre"
Para establecer la identidad predeterminada de su cuenta. Omitir -global para establecer la identidad solo en este repositorio.
Almacenamos nuestros archivos de proyecto dentro de nuestro sitio GitHub.
Desea restaurar una revisión antigua de un archivo: Git Checkout 8A7B201 index.html Si especifica "cabeza" como revisión, restaurará la última versión comprometida del archivo, desanimando efectivamente cualquier cambio local que actualice en ese archivo:
Git Checkout Head Index.html
Podemos revertir nuestros archivos eliminados en el directorio de trabajo usando el comando:
Git Checkout -.
o Git Checkout - FileMame ...
Git es programa y github es sitio - tutorial de implementación (libro)
Git usamos EG para sincronizar nuestros scripts:
A partir del 13 de agosto de 2021, GitHub ya no acepta contraseñas de la cuenta al autenticar las operaciones de GIT en GitHub.com, y requiere el uso de autenticación basada en token , como una ** pat, token de acceso personal sobre https = PSW 40 caracteres longitud (recomendado) ** (para desarrolladores) o una oauth o oauthub aplicaciones de instalación de la aplicación (para integradores) para todos los integradores de autenticados GitUt. También puede continuar usando las teclas SSH donde prefiera.
https://docs.github.com/en/github/authenticating-to-github/keeping-your-account-and-data-secure/creating-a-personal-acess-token
λ Git Remote -Sutens:
origen https: // [token]@github.com/slavkoss/fwphp.git (fetch)
Origin https:/[token]@github.com/slavkoss/fwphp.git (push)
Entonces, el último comodidad permanece y es el primer commit:
Guarde su .Git/Config antes y restaurarlo después. (Lo borro en el contenedor de reciclaje).
Mi PHP IDE es el paquete Symenu Zip como lanzador para todo SW que se enumera a continuación (portátil si es posible):
Complemento de markdown de BlocePad ++
Copie tmarkdownViewerPlusplus.dll a los complementos Sub-hilos en su directorio de instalación de BlocePad ++.
El complemento agrega un pequeño icono de Markdown a la barra de herramientas para alternar al visor como panel acoplable.
Luego en la configuración de NPP -> importar -> Importar complementos.
Ver en J: awww www Globals NPPSess File y otros archivos NPPSess.
MD a convertidores HTML en INET:
También bueno, todo portátil, todo en Symenu: Notepad2-Mod (2 MB), Atom (524 MB),
Código de Visual Studio (247 MB), Cudatext (28 MB), PSPAD (23 MB), RJ Texted (416 MB),
HTML WYSIWYG EDITORS: Microsoft Expression Web (abandonado pero aún bueno).
Evito DreamVeawer, Komposer (abandonado, demasiado viejo).
Comandante :
es viejo pero mejor (Janne Huttunen) o Simmilar todo , ver Symenu
Meinplatz (x64) (parte de los programas portátiles de Symenu) como Treesize
o Multicommander, Q-Dir, Total Commander ...
NAVEGADOR :
Google Chrome, Cyberfox, Pale Moon
(en Symenu) es Win CMD Line, tiene Git.
El compositor lo ayuda a declarar, administrar e instalar dependencias de proyectos PHP.
FTP Cliente WinsCP . Ignorar: | *.cremallera; J: awww www.git; J: awww www proveor/b12phpfw/dbconn_allsites.php;
Comunidad de serva del servidor FTP Symenu
Manual de PHP
Guía de estilo PHP
Tutorial PHP por W3Schools
Guzzle es un cliente PHP HTTP que facilita el envío de solicitudes HTTP y trivial para integrarse con los servicios web.
DesignPatternSPHP es una colección de patrones de diseño conocidos y algún código de muestra sobre cómo implementarlos en PHP 7.4. Cada patrón tiene una pequeña lista de ejemplos.
CMS de archivo plano portátil de Grav con potente sistema de gestión de paquetes de complementos y temas y grav.
Guía de php
_.-'''''-._
.' _ _ '.
/ (o) (o)
| |
| / |
'. .' /
'. ''---'' .'
'-._____.-'
muestra la estructura de clases: atributos y métodos
Arriba ...... 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 Código de núcleo.
Nivel: Todos los sitios (el mismo código para todos los sitios EE compartido, global, común)
( Modelo , abstracción)
Clase DBCONN_ALLSITES. El rasgo es simmilar a la clase . La razón del rasgo es la estructura del código neto:
Algunas clases pueden usar más rasgos, neto , más padres, pero pueden extender solo una clase - jerarquía .
No uso rasgo: tenía algún error como el código avanzado con frecuencia.
// see class script // see class script
Básicamente, db_allsites.php read (RR, informe) funciona como el código en:
/www/www/clean_architecture.md. Lo hice en la versión 10 de enero de 2023.
B12PHPFW Código de núcleo.
Nivel: Todos los sitios (el mismo código para todos los sitios EE compartido, global)
// see class script // see class script Para evitar comandos inc. En muchos scripts
B12PHPFW Código de núcleo.
Nivel: Todos los sitios (el mismo código para todos los sitios EE compartido, global, común)
// see class script // see script Código del módulo B12PHPFW.
Nivel: Módulo (mismo código para la carpeta EE del módulo, por ejemplo, MNU o MKD o MSG = Blog)
Para la ejecución del programa, la jerarquía de clases es: como si todos los atributos y métodos en las clases anteriores a Home_ctr estén en la clase Home_CTR. Es decir, están en $ este objeto que se instancia (creado en la memoria) en Home_Ctr (que parece contener todas las clases: descripciones de atributos y métodos por encima de él).
¿Por qué son los atributos y métodos compartidos (comunes) en la jerarquía sobre Home_ctr y no en Home_CTR?
No queremos escribir en cada script de home_ctr el código completo compartido (común) por encima de home_ctr .
Arriba ..... dirs ..... uml ..... dm ..... ide ..... crud ..... sw fw
Ver código de información:
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 es muy diferente que (¿todos?) Otros marcos PHP (prefiero "Menú y esqueletos de código Crud") porque::
Los Dirs son como Oracle Forms Form Module .fmb https://github.com/ngrt/mvc_todo - muy buena codificación (pero con un ejemplo simple, sin globals, no hay espacios de nombres ...), muestra directs de marcas PHP habituales y una idea de enrutamiento: ... GLOMODUL Z_EXAMPLES MVC_FW nGRT_MVC_TODO O MUCHOS MY MY MY MY MY MY MY MY MY MY MY MY MY MY MY MY MY MY MY MY MVE MVE MVE MVE MA o buscar en Google: marco de PHP de GitHub
y otras razones mencionadas a continuación
Vea Mini3 PHP Framework https://github.com/panique/mini3, que es excelente raro no para no simple ejemplo de MVC (mucha buena codificación). Mi enrutamiento con valores clave es diferente, pero el envío de métodos de clase de inicio se basa en Mini3 .
B12PHPFW tiene 3 módulos y algunas utilidades:
Arriba ...... dirs ..... uml ..... dm ..... ide ..... crud ..... sw fw
Consulte Uso de MKD FWPHP/Glomodul/Mkd/02/01_FWPHP/PHP_DIP_DI.TXT
Arriba ...... dirs ..... uml ..... dm ..... ide ..... crud ..... sw fw
Puede ser jQuery, PHP, Bootstrap Ajax DB Table Rows Rows es más simple y más rápido mejor, pero prefiero no jQuery, no Ajax. Solo JavaScript que necesito es diálogo Sí o no.
Crud fila en la canción de la mesa (#id, artista, pista, enlace) . Mini3 Framework https://github.com/panique/mini3 es lo mejor para aprender el esqueleto de código PHP y Frameworks. Mi módulo ADRS en el grupo de módulos Glomodul es mini3 en B12PHPFW. Por qué ? Creo que para los sitios grandes, Mini3 es demasiado simple , no hay acciones ...
Ver guiones.
Crud más simple ..... Index.php ..... Home_ctr ..... Inicio (página de la tabla) ..... Crear ..... Read (Perfil de usuario - Formulario) ..... Actualización .... Adaptador
Necesitamos un punto de entrada único en el módulo para evitar el desorden con los enlaces (https: // ... Los enlaces no están claros, mejor son incluyendo y llamadas de método).
<?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.
*/ índice.php ..... index.php ..... home_ctr ..... Inicio (página de tabla) ..... Crear ..... Read (Perfil de usuario - Formulario) ..... Actualización .... Adaptador
. . .
* ------------------------------------------------------------------------------
* 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 ..... ** Inicio (página de la tabla ..... Crear ..... Read (Perfil de usuario - Formulario) ..... Actualización .... Adaptador
<!-- 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 >índice.php ..... index.php ..... home_ctr ..... Inicio (página de tabla) ..... Crear ..... Read (Perfil de usuario - Formulario) ..... Actualización .... Adaptador
<?php
// J:awwwwwwfwphpglomoduladrscre_row_frm.php
. . .index.php ..... index.php ..... home_ctr ..... inicio (página de tabla) ..... Crear ..... Read (Perfil de usuario - Formulario ..... Actualización .... Adaptador
<?php
//J:awwwwwwfwphpglomoduladrsread_tbl.phpíndice.php ..... index.php ..... home_ctr ..... Inicio (página de tabla) ..... Crear ..... Read (Perfil de usuario - Formulario) ..... Actualización .... Adaptador
<?php
// J:awwwwwwfwphpglomoduladrsupd_row_frm.phpSimpleDcrud index.php ..... index.php ..... home_ctr ..... inicio (página de tabla) ..... Crear ..... Read (Perfil de usuario - Formulario) ..... Actualización .... [Adaptador]
<?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
No es fácil ver la necesidad de por ejemplo, el módulo de usuario convierte el código de MVC de procedimiento a MVC OOP con espacios de nombres y el código de navegación (URL -S, enlaces) es el mismo: OOP no ayuda. El código de módulo de usuario de MVC de procedimiento, por ejemplo, puede ser más claro y legible. Entonces, ¿por qué OOP es mejor?
Algunos dicen: "¿Es OOP error?" - Por ejemplo, falta de reutilización en OOP - Para obtener plátano (algún método o atributo), también obtiene gorila que sostiene el plátano y la jungla de gorila entero (todas las clases superiores con dependencias complicadas ).
Por ejemplo, las interfaces que ayudan a obtener solo plátano, pero la codificación es complicada: solo podría encontrar ejemplos de código de trabajo de Weak-Weak-Weak sobre este tema.
J: awww www Vendor b12phpfw db_allsites_intf.php (17 golpes) Línea 15: función pública estática get_or_new_dball (string $ llamado_from = ' desconocido Caller '); Línea 16: función pública estática cerradabconn (); Línea 17: función pública estática getDbi (); Línea 18: función pública estática setDo_pgntion ($ new_val); Línea 22: // 11111 ************************ La línea 24: Función pública estática get_cursor (// objeto $ pp1 // como oracle cursor // en su lugar RR línea 27: función pública estática rrnext (objeto $ cursor, array $ otros = []): objeto; línea 29: función pública estatica rrcount (string $ tbl, arney, arney) Función pública estática rr_last_id (cadena $ tbl, array $ other = []): int ; objeto;
Line 45: // static public function pre_cc_uu( Line 56: static public function uu ( $tbl, $flds, $where, $binds = [] ) ; Line 62: // 33333 ******************** enterprise bussiness functions (rules, utilities) Line 64: static public function debugPDO(string $dmlxx, array $binds, array $ ph_val_arr): string;
Por ejemplo, el módulo de factura funciona con dos tablas: factura y factura_items (o tres tablas: factura, factura, factura_items). Simmilar "Solución más simple" Tres Dirs M, V, C es malo - :) - Los amantes de 3DIRS ponen codificación Technik (separación de código M, V, C) en primer plano páginas (funcionalidad, lógica de negocios).
El plátano RR ya no está en la jungla, Gorilla y la jungla son solo una clase abstracta config_allsites que es de facto $ pp1 = propiedades.
La paleta de propiedades de banana $ PP1 = puede causar dificultades en los módulos agregados (compuesto, compuesto, multiplex) como el blog, la factura ... pero $ pp1 es inevitablemente (inminencia, necesidad) gorila-jungle y no se puede simplificar aún más. Trabajé 20 años en $ pp1 y la jungla global (Oracle Forms 6i) no tan bien fundado como aquí está.
Vea https://phpthewrongway.com/, o Joe Armstrong por qué OOP apesta http://harmful.cat-v.org/software/oo_programming/why_oo_sucks.
B12PHPFW se basa en ideas en muchos tutoriales, por ejemplo, los próximos pocos están entre las mejores (pero también en algunas ideas en los mejores marcos PHP Laravel, Simfony, YII, Phalcon ...).
Hice un código B12PHPFW mucho más simple basado en ideas en el blog de Jazeb Akram CMS - Diseño de páginas y Mini3 PHP FW - Código Skeleton , Ruting. Los libros sobre ejemplos de código PHP no son tan buenos.
CMS Blog Video (7.7 GB) Jazeb Akram: Udemy - El curso completo de PHP MySQL Professional con 5 proyectos, raro no tutorial simple . Similar es video (12.3 GB) edwin_diaz_php para principiantes - convertirse en un proyecto PHP Master - CMS. También algunos otros videos, por lo que parece que son los mejores/diseños de página más simples (no esqueletos de código) para publicaciones de CMS Blog EE, mensajes. Los videos son enormes por razones comerciales para alcanzar un mayor num_of_gb EE $/GB, pero no hay el mejor código: hay un estilo de programación más antiguo.
Mini3 (Mini3 Php FW https://github.com/panique/mini3 - Raro no simple para un módulo de mesa simple pero podría tener más funcionalidad.
/glomodul/z_examples/mvc_fw/hcstudio_easy/public/a simple ejemplo de FW pero buen código para aprender php (solo leer de crud), explicó el middleware . Para un enrutamiento y un middleware complicados, ¡por lo que no es fácil!
https://github.com/ngrt/MVC_TODO El código se explica en este blog 2017.12.17: https://medium.com/@noufel.gouirhate/create-your-ownmvcframework-in-php-php-af7bd1f0ca19
https://dev.to/jorgecc/a-minimalist-mvc-project-using-php-and-without-aframework-4pd8
https://github.com/trpb/immutablemvc
Otro :
Hice muchos cambios (espero mejoras) que hice porque no me gustan las soluciones propuestas en los mejores marcos de PHP y en fuentes de aprendizaje mencionadas anteriormente (especialmente codificando el tutorial de traversy). Las acciones (reutilizables, globales, incluyen) no están bien explicadas y codificadas allí.
Creo que debería ser simple/rápido/profesional: acciones , enrutamiento, disco, espacios de nombres funcionales y cargas de clases, edición de texto rico en web ...
Es por eso que pasé tantas horas en esto (desperdicio de tiempo enorme que debería hacer autores de software de herramientas, no usuarios de software de herramientas como yo).
Este esqueleto de código parece complicado en comparación con https://github.com/panique/***mini3***, que puede ser la mejor plantilla de código FW para proyectos más pequeños (y aprendizaje de PHP).
Para grandes proyectos , las acciones - Globals, los reutilizables que uso aquí son muy importantes, lo mismo que los módulos en carpetas propias (no todos en solo 3 Dirs M, V, C) .
Acerca de las acciones (Globals) Ver discusión:
https://medium.com/@sameernyaupane/php-software-architecture-part-1-mvc-1c7bf042a695
https: //medium.co## 3.2m/@sameernyaupane/php-software-architecture-part-2-the-alternates-1bd54e7f7b6d
https://blog.ircmaxell.com/2014/11/alternates-to-mvc.html
Durante el invierno 2019/2020 año (demasiado tarde porque probé mucho lo que otros hicieron) hice la versión 6. De menú y el esqueleto de código PHP crud (marco propio llamado "b12phpfw") - El código central es de ~ 50 kb. Versión 7 .: Php 7 y Trait DBI es en octubre de 2020.
Por qué ? No me gustan las soluciones propuestas en los mejores marcos PHP (Laravel, Simfony, YII ...) y fuentes de aprendizaje (Internet, libros). Creo que el código PHP de la factura del módulo de EG debería estar en la carpeta propia, como la factura de formularios Oracle, FMB (no todos los formularios/informes en 3 carpetas: M, V, C). Creo que debería ser simple/rápido/profesional: globales , enrutamiento, disco, carga de clases, edición de texto rico en web: es por eso que desperdicié muchas horas codificando mi B12PHPFW (desperdicio de tiempo enorme que debería hacer autores de software, no programadores de usuarios de SW como yo).
¿Por qué no me gustan las soluciones propuestas y lo que hice para (espero) mejorarlas? Las características de color rojo son las principales razones para B12PHPFW, pero también mejoré otras características. :
TraversyMVC (tiene video) y Mini3 se simplifican, con algunas (¿muchas?) Diferencias en comparación con Laravel, Simfony, YII, Falcon ... B12Phpfw es mucho más diferente: ver características de color rojo. PHP framework authors do not show such fitures table, for me it is hiding fitures (sell cat in bag).
| Característica | 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) | tiene | 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) | óptimo | 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 | malo |
| 7. (Posts edited with any) WYSIWYG editor | tiene | 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 | tiene | has like Mini3 |
| 10. namespaces (own PSR-4 (or Composer's) autoloading classes scripts) | mejorado | Mini3 has, TraversyMVC blog has not |
| 11. All scripts are included (ee no http jumps except some jumps in other module) | tiene | Mini3 has, B12phpfw took it from Mini3, TraversyMVC blog has not |
| 12. jQuery only for Bootstrap 5 | Sí | 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 | tiene | tiene |
| 15. authentification (log in / out) | tiene | has not, TraversyMVC blog has |
| 16. authorization (only logged in users may execute some code ee CRUD code...) | tiene | Mini3 has not, TraversyMVC blog has |
| 17. Own debugging very simple and useful : msg in pre tag or popup JS msg). xdebug also helps. | tiene | has not |
| 18. PHP code here is good for (more) large sites | Sí | No |
| 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.
Hecho :
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.