Section courante

A propos

Section administrative du site

 Langage  Elément  Tutoriel  Aide 
ABAP/4
Ada
Assembleur
Assembly & bytecode
ASP (Active Server Pages)
Basic
C
C++
C# (C Sharp)
Cobol
ColdFusion
Fortran
HTML
Java
JavaScript
LISP
Logo
LotusScript
Oberon
Pascal
Perl
PHP
PL/1
Prolog
Python
Rebol
REXX
Ruby
Rust
SAS
NoSQL
SQL
Swift
X++ (Axapta)
GNAT
SMALLAda
VHDL
Assembleur 370
Assembleur 1802
Assembleur 4004
Assembleur 6502
Assembleur 6800
Assembleur 68000
Assembleur 8080 et 8085
Assembleur 8089
Assembleur 80x86
Assembleur AGC4
Assembleur ARM
Assembleur DPS 8000
Assembleur i860
Assembleur Itanium
Assembleur MIPS
Assembleur PDP-11
Assembleur PowerPC
Assembleur RISC-V
Assembleur SPARC
Assembleur SuperH
Assembleur UNIVAC I
Assembleur VAX
Assembleur Z80
Assembleur Z8000
Assembleur z/Architecture
ASSEMBLER/MONITOR 64
Micol Assembler
GFA Assembler
A86
MASM (Macro Assembler)
TASM (Turbo Assembler)
CIL
Jasmin
LLVM
MSIL
Parrot
P-Code (PCode)
SWEET16
G-Pascal
ASP 1.0
ASP 2.0
ASP 3.0
ASP.NET
ASP.NET Core
ABasiC (Amiga)
Adam SmartBASIC
Altair BASIC
AmigaBASIC (Amiga)
AMOS Basic (Amiga)
Atari Basic (Atari 400, 600 XL, 800, 800XL)
Basic Apple II (Integer BASIC/APPLESOFT)
Basic Commodore 64 (CBM-BASIC)
Basic Commodore 128 (BASIC 7.0)
Basic Commodore VIC-20 (CBM-BASIC 2.0)
Basic Coco 1 (Color Basic)
Basic Coco 2 (Extended Color Basic)
Basic Coco 3 (Extended Color Basic 2.0)
BASICA (PC DOS)
Basic Pro
BBC BASIC
Blitz BASIC (Amiga)
DarkBASIC
Dartmouth BASIC
GFA-Basic (Atari ST/Amiga)
GWBASIC (MS-DOS)
Liberty BASIC
Locomotive BASIC (Amstrad CPC)
MSX-Basic
Omikron Basic (Atari ST)
Oric Extended Basic
Power Basic
Quick Basic/QBasic (MS-DOS)
Sinclair BASIC (ZX80, ZX81, ZX Spectrum)
ST BASIC (Atari ST)
Turbo Basic
Vintage BASIC
VBScript
Visual Basic (VB)
Visual Basic .NET (VB .NET)
Visual Basic pour DOS
Yabasic
BeckerBASIC
SIMONS' BASIC
Basic09 d'OS-9
Disk Extended Color Basic
Basic09 d'OS-9
Disk Extended Color Basic
Access
Excel
Visual Basic pour Windows
Visual Basic .NET pour Windows
C Shell Unix (csh)
C pour Amiga
C pour Atari ST
C pour DOS
C pour Falcon030
C pour GEMDOS (Atari ST)
C pour Linux
C pour PowerTV OS
C pour OS/2
C pour Unix
C pour Windows
Aztec C
CoCo-C
GNU C
HiSoft C
IBM C/2
Introl-C
Lattice C
Microsoft C
MinGW C
MSX-C
Open Watcom C
OS-9 C Compiler
Pure C
Quick C
Turbo C
HiSoft C for Atari ST
HiSoft C for CP/M (Amstrad CPC)
C++ pour OS/2
C++ pour Windows
Borland C++
C++Builder
IBM VisualAge C++
Intel C++
MinGW C++
Open Watcom C++
Symantec C++
Turbo C++
Visual C++
Visual C++ .NET
Watcom C++
Zortech C++
C# (C Sharp) pour Windows
Apple III Cobol
Microsoft Cobol
BlueDragon
Lucee
OpenBD
Railo
Smith Project
Microsoft Fortran
WATFOR-77
CSS
FBML
Open Graph
SVG
XML
XSL/XSLT
LESS
SASS
GCJ (GNU)
JSP
Jython
Visual J++
Node.js
TypeScript
AutoLISP
ACSLogo
LotusScript pour Windows
Amiga Oberon
Oberon .NET
Apple Pascal
Delphi/Kylix/Lazarus
Free Pascal
GNU Pascal
HighSpeed Pascal
IBM Personal Computer Pascal
Lisa Pascal
Maxon Pascal
MPW Pascal
OS-9 Pascal
OSS Personal Pascal
Pascal-86
Pascal du Cray Research
Pascal/VS
Pascal-XT
PURE Pascal
QuickPascal
RemObjets Chrome
Sun Pascal
THINK Pascal
Tiny Pascal (TRS-80)
Turbo Pascal
UCSD Pascal
VAX Pascal
Virtual Pascal
Turbo Pascal for CP/M-80
Turbo Pascal for DOS
Turbo Pascal for Macintosh
Turbo Pascal for Windows
CodeIgniter (Cadre d'application)
Drupal (Projet)
Joomla! (Projet)
Phalanger (PHP .NET)
phpBB (Projet)
Smarty (balise)
Twig (balise)
Symfony (Cadre d'application)
WordPress (Projet)
Zend (Cadre d'application)
PL360
PL/M-80
PL/M-86
Turbo Prolog
CPython
IronPython
Jython
PyPy
AREXX
Regina REXX
JMP
Btrieve
Cassandra
Clipper
CouchDB
dBASE
Hbase
Hypertable
MongoDB
Redis
Access
BigQuery
DB2
H2
Interbase
MySQL
Oracle
PostgreSQL
SAP HANA
SQL Server
Sybase
U-SQL
Introduction
Référence des unités
Les premiers pas
Travailler avec l'application
Conteneur de dépendances
Répartiteur
Environnement CGI
Configurer l'application
Gestionnaire d'erreurs
Travailler avec un routeur
Travailler avec une base de données
Utilisation des journaux de bord
Travailler avec Fano CLI
Préface
Notes légales
Dictionnaire
Recherche

Les premiers pas

La page suivant explique les étapes minimales requises pour configurer une application Web avec Fano Framework fonctionnelle sur une machine de développement.

Prérequis

Créer une application

Assurez-vous que toutes les exigences ci-dessus sont remplies. Exécutez :

fanocli --project-http=Hello
cd Hello
fanocli --controller=Home --route=/
./build.sh
./bin/app.cgi

Exécutez-le depuis un navigateur

Ouvrez un navigateur Web et accédez à http://localhost:20477. Vous devriez voir le texte du contrôleur Home s'afficher dans le navigateur. Félicitations, votre application fonctionne.

Procédure pas à pas des commandes

Examinons chaque commande ci-dessus pour comprendre ce qu'elle fait. La commande suivante indique à Fano CLI de créer un projet d'application Web http dans le répertoire Hello. Le répertoire ne doit pas exister. Lisez Création d'un projet avec Fano CLI pour créer différents projets d'application Web (CGI, FastCGI, SCGI, uwsgi ou http).

fanocli --project-http=Hello

Nous changeons le répertoire actif pour le répertoire Hello nouvellement créé.

cd Hello

Créez un contrôleur nommé HomeController.pas gérant la requête vers la route «/» :

fanocli --controller=Home --route=/

Sans --route=/, par défaut, Fano CLI créera la même route que le nom du contrôleur en minuscules, c'est-à-dire /home. Si vous omettez --route=/, vous ne pourrez accéder à HomeController qu'en utilisant l'URL http://localhost:20477/home au lieu de http://localhost:20477.

Compiler l'application :

./build.sh

Exécuter l'application :

./bin/app.cgi

Par défaut, l'exécutable généré portera le nom app.cgi dans le répertoire bin.

Présentation du répertoire du projet

Fano Framework n'a pas d'avis sur la structure des répertoires de votre projet. Vous pouvez structurer les répertoires et les fichiers de votre projet comme vous le souhaitez. Cependant, Fano CLI crée plusieurs fichiers et répertoires qui suivent certaines hypothèses.

Répertoires

Répertoire Description
src Répertoire du code source du projet d'application
bin Répertoire de sortie des binaires compilés
config Répertoire de configuration de l'application
resources Répertoire de ressources d'application, telles que les modèles HTML, SCSS,...
storages Répertoire des fichiers générés par l'exécution de l'application, tels que les fichiers de session, les journaux,...
tools Répertoire des scripts d'aide de l'interpréteur de commande, tels que les scripts pour nettoyer les binaires compilés.
public Répertoire racine du document d'application où résident les ressources publiques telles que les images, les feuilles de style en cascade et les fichiers JavaScript.

Fichiers

src/app.pas

Il s'agit du code source typique du programme principal de l'application Web étant généré par Fano CLI (les commentaires sont omis par souci de concision) :

  1. program app;
  2.  
  3. uses
  4.  
  5.     {$IFDEF UNIX}
  6.     cthreads,
  7.     {$ENDIF}
  8.     sysutils,
  9.     fano,
  10.     bootstrap;
  11.  
  12. var
  13.     appInstance : IWebApplication;
  14.     cliParams : ICliParams;
  15.     svrConfig : TFpwebSvrConfig;
  16.  
  17. begin
  18.     cliParams := (TGetOptsParams.create() as ICliParamsFactory)
  19.         .addOption('host', 1)
  20.         .addOption('port', 1)
  21.         .build();
  22.     svrConfig.host := cliParams.getOption('host', '127.0.0.1');
  23.     svrConfig.port := cliParams.getOption('port', 20477);
  24.     writeln('Starting application at ', svrConfig.host, ':', svrConfig.port);
  25.  
  26.     svrConfig.documentRoot := getCurrentDir() + '/public';
  27.     svrConfig.serverName := 'http.fano';
  28.     svrConfig.serverAdmin := 'admin@http.fano';
  29.     svrConfig.serverSoftware := 'Fano Framework Web App';
  30.     svrConfig.timeout := 120;
  31.  
  32.     //décommenter les lignes suivantes prend en charge https
  33.     //svrConfig.useTLS := true;
  34.     //svrConfig.tlsKey := '/path/to/ssl/cert/key';
  35.     //svrConfig.tlsCert := '/path/to/ssl/cert/cert';
  36.  
  37.     appInstance := TDaemonWebApplication.create(
  38.         TFpwebAppServiceProvider.create(
  39.             TAppServiceProvider.create(),
  40.             svrConfig
  41.         ),
  42.         TAppRoutes.create()
  43.     );
  44.     appInstance.run();
  45. end.

Le programme principal crée une instance d'application Web et des instances de fournisseur de services pour créer tous les services dont votre application a besoin, puis l'exécuter.

TDaemonWebApplication et TFpWebAppServiceProvider sont des classes intégrées fournies par Fano Framework pour prendre en charge la création d'applications Web http de longue durée utilisant la bibliothèque de serveur http Fpweb de Free Pascal.

Selon le paramètre que vous utilisez pour créer un projet avec Fano CLI, il peut finir par utiliser TIndyAppServiceProvider, TMhdAppServiceProvider, TFastCgiAppServiceProvider, TScgiAppServiceProvider, TUwsgiAppServiceProvider pour une application Web http basée sur le serveur http Indy, le serveur http libmicrohttpd, FastCGI, SCGI, l'application Web uwsgi respectivement.

TAppServiceProvider et TAppRoutes sont deux classes spécifiques à votre application étant responsables de la création de tous les services et itinéraires requis par votre application. Les deux sont déclarées dans l'unité bootstrap.pas

src/bootstrap.pas

Ce fichier typique est généré par Fano CLI (les commentaires sont omis par souci de concision) pour permettre à l'application d'initialiser tous les services et itinéraires dont elle a besoin.

  1. unit bootstrap;
  2.  
  3. interface
  4.  
  5. uses
  6.  
  7.     fano;
  8.  
  9. type
  10.  
  11.     TAppServiceProvider = class(TDaemonAppServiceProvider)
  12.     protected
  13.  
  14.     public
  15.         procedure register(const container : IDependencyContainer); override;
  16.     end;
  17.  
  18.     TAppRoutes = class(TRouteBuilder)
  19.     public
  20.         procedure buildRoutes(
  21.             const container : IDependencyContainer;
  22.             const router : IRouter
  23.         ); override;
  24.     end;
  25.  
  26. implementation
  27.  
  28. uses
  29.     sysutils,
  30.     HomeControllerFactory;
  31.  
  32.  
  33.  
  34.     procedure TAppServiceProvider.register(const container : IDependencyContainer);
  35.     begin
  36.         {$INCLUDE Dependencies/dependencies.inc}
  37.     end;
  38.  
  39.     procedure TAppRoutes.buildRoutes(
  40.         const container : IDependencyContainer;
  41.         const router : IRouter
  42.     );
  43.     begin
  44.         {$INCLUDE Routes/routes.inc}
  45.     end;
  46. end.

TAppServiceProvider est une classe qui implémente l'interface IServiceProvider ayant un nom de méthode register(). Elle sera appelée par Fano Framework lors de l'initialisation et recevra une instance du conteneur de dépendances. Dans cette méthode, vous initialisez tous les services requis par votre application. TAppServiceProvider hérite de TDaemonAppServiceProvider configurant les services communs pour les applications Web de longue durée.

TAppRoutes est une classe implémentant l'interface IRouteBuilder ayant une méthode buildRoutes() à implémenter. Elle hérite de TRouteBuilder, une classe abstraite implémentant cette interface. L'application crée des routes dans la méthode buildRoutes().

Pour simplifier la création de ce fichier, Fano CLI utilise deux fichiers d'inclusion principaux dependencies.inc et routes.inc.

src/Dependencies/dependencies.inc

Les extraits suivants montrent le contenu typique de ce fichier (les commentaires sont omis pour des raisons de concision). Chaque ligne contient des fichiers spécifiques à un usage particulier :

  1. {$INCLUDE main.dependencies.inc}
  2. {$INCLUDE middlewares.dependencies.inc}
  3. {$INCLUDE models.dependencies.inc}
  4. {$INCLUDE views.dependencies.inc}
  5. {$INCLUDE controllers.dependencies.inc}

Par exemple, dans controllers.dependencies.inc, vous pouvez avoir le code suivant :

  1. container.add('homeController', THomeControllerFactory.create());

enregistrant la classe d'usine pour le contrôleur domestique à l'aide de la clef homeController.

src/Routes/routes.inc

Il s'agit d'un fichier d'itinéraires typique généré par Fano CLI comme indiqué ci-dessous :

  1. {$INCLUDE Home/routes.inc}

Qui à leur tour incluent d'autres fichiers. Par exemple, src/Routes/Home/routes.inc peut contenir le code suivant :

  1. router.get('/', container.get('homeController') as IRequestHandler);

Le code ci-dessus enregistre la route / avec la méthode GET sur l'instance du contrôleur domestique.

src/App/Home/Controllers/HomeController.pas

Ce code de contrôleur typique est généré par Fano CLI (les commentaires sont omis pour des raisons de concision). Il hérite de TAbstractController étant une classe abstraite implémentant l'interface IRequestHandler possédant une méthode handleRequest().

  1. unit HomeController;
  2.  
  3. interface
  4.  
  5. {$MODE OBJFPC}
  6. {$H+}
  7.  
  8. uses
  9.  
  10.     fano;
  11.  
  12. type
  13.  
  14.     THomeController = class(TAbstractController)
  15.     public
  16.         function handleRequest(
  17.             const request : IRequest;
  18.             const response : IResponse;
  19.             const args : IRouteArgsReader
  20.         ) : IResponse; override;
  21.     end;
  22.  
  23. implementation
  24.  
  25.     function THomeController.handleRequest(
  26.         const request : IRequest;
  27.         const response : IResponse;
  28.         const args : IRouteArgsReader
  29.     ) : IResponse;
  30.     begin
  31.         response.body().write('Home controller');
  32.         result := response;
  33.     end;
  34.  
  35. end.

Lorsque la requête du navigateur Internet route «/», la méthode handleRequest() est appelée, affichant le contrôleur Home dans le navigateur.

La méthode handleRequest() reçoit la requête, la réponse et l'instance de paramètre de route que vous pouvez utiliser, par exemple, pour lire le paramètre de chaîne de caractères de requête.



PARTAGER CETTE PAGE SUR
Dernière mise à jour : Vendredi, le 18 octobre 2024