PradoSoft

Foire Aux Questions

From PRADO Wiki

Contents

Est-ce que PRADO a une couche d'abstraction pour l'accès à une base de données?

Ce n'est pas le cas dans les version 3.0.x. Un support complet de BDD sera fournit à partir de la v3.1, et inclura une couche d'abstraction ainsi que des contrôles et des composants pour BDD. Vous pouvez cependant utiliser une des nombreuses librairies d'accès aux données existantes en PHP.

En voici quelques unes parmi les plus populaires (liste non exhaustive) :

Quelle est la différence entre une Page et un Template?

Strictement parlant, il y a deux concepts différents dans PRADO et ils ne sont pas vraiment comparables. Les contrôles, par exemple, composants capables de présentation et d'interaction avec l'utilisateur, peuvent avoir des templates pour aider à organiser leur disposition de présentation. Une page est un genre spécial de contrôle qui peut être demandé directement par des utilisateurs, alors que d'autres contrôles sont gérés par une page.

Les pages

  • doivent avoir un template (fichiers .page)
  • n'ont pas obligatoirement besoin de classes de page et utilisent TPage par défaut si rien n'est spécifié
  • permettent les classes de page mais elles doivent hériter de TPage
    • TPage est une sous classe de TTemplateControl

Les "non-pages" (contrôles)

  • doivent avoir des classes de contrôle
  • doivent avoir des templates associés (fichiers .tpl) si le contrôle des classes hérite de TTemplateControl

Quelle est la différence entre les modules et les services?

Brièvement, quand une requête entre, la requête passe par un service (habituellement TPageService), qui réalise la requête via des modules (habituellement THttp* and TPage).

Les modules implémentent l'interface IModule. Les modules sont des librairies "derrière la scène" de l'application. L'un des rôles des modules est de fournir le composant "modèle" du pattern MVC (si MVC est le design pattern utilisé à ce moment).

Les services implémentent l'interface IService. Les services sont des pont entre l'application et l'utilisateur. Toutes les fois qu'un utilisateur envoie une requête à l'application PRADO, elle passe d'abord par un service. La plupart des applications se fondent exclusivement sur TPageService et implémentent rien d'autre.

Comment puis-je créer des liens vers d'autres pages?

Parce que le format d'une URL peut changer, les développeurs ne doivent pas utiliser des liens explicites vers d'autres pages dans un projet avec PRADO. Les développeurs doivent utiliser l'abstraction qui leurs est offerte par constructUrl():

 
<a href="<%= $this->Service->constructUrl('Chemin.Vers.LaPage') %>">Nom du lien</a>
 

S'il y a besoin de variables GET:

 
<a 
href="<%= $this->Service->constructUrl('Chemin.Vers.LaPage', 
array('GetVarNom1'=>'GetVarValue1','GetVarNom2'=>'GetVarValue2')) %>">Nom du lien</a>
 

Quelle est la différence entre TPage->onInit() et TPage->onLoad()?

C'est vraiment une question relative au cycle de vie des pages (page's lifecycle) sur "quelles propriétés (y compris les valeurs) devrait avoir des contrôles ?". Prado charge les propriétés des contrôles en cinq étapes, chacune prédominant sur la dernière.

  1. Données Template.
  2. Données remplies dans onInit: C'est ici que vous devez initialiser les composants. Une partie de l'initialisation est de lier les données. Par exemple, dans une page contenant une liste (listbox) de pays, vous pourriez vouloir la remplir avec les pays à cette étape. TListControl (et tous ses descendants TDropDownList, TCheckBoxList, etc), TDataGrid, TDataList, et TRepeater doivent être initialisés ici.
  3. Données ViewState.
  4. Données POST. Si vos contrôles n'ont pas été initialisés à cette étape, des comportements étranges peuvent en résulter.
  5. Données remplies dans onLoad: Si vous voulez réaffecter les valeurs POST, vous devez le faire ici.

Si aucune données n'influent sur le chargement des contrôles dans les étapes ViewState et POST, onInit et onLoad sont fonctionellement équivalents.

Quelle est la différence entre les tags "Databind" et "Expression" ?

Un tag Expression s'exécute au stage PreRender, qui se produit avant que les contrôles comme un "TRepeater" ne s'exécutent.

Un tag Databind charge les données à chaque instance de "databinding" (n.b. chaque fois qu'un TRepeater charge un élément de donnée). L'utilisation de tags Databind peut potentiellement affecter les performances de l'application.

Comment éviter de "Hardcoder" des variables comme, par exemple, le nom du site ?

Cette technique est utilisée dans la démo "Blog" de Prado.

  • Créer un fichier de configuration, "Name.xml":
<?xml version="1.0" encoding="utf-8"?>
<parameters>
    <parameter id="ConfigKey" value="ConfigValue" />
</parameters>
  • Lier le fichier de configuration au fichier "application.xml" sous <application> <modules>: (Notez l'absence de l'extension .xml)
<module class="System.Util.TParameterModule" ParameterFile="Application.Path.toSettings.Name" />
  • Utiliser les variables de configuration
    • ...dans les templates :
      <%$ ConfigKey %>
    • ...dans les classes :
      $this->Application->Parameters['ConfigKey']

Comment puis-je connaitre l'utilisateur actuellement connecté?

Ceci retourne un objet qui implémente IUser:

$this->getApplication()->getUser()

Comment puis-je utiliser les librairies PEAR avec PRADO?

Les librairies PEAR dépendent du fait d'avoir leur racine dans le chemin, de sorte que si votre chemin PHP n'inclut pas les librairies PEAR, changez-le dans php.ini ou en réaffectant la variable 'include_path' via ini_set().

Cependant, cela n'arrête pas les inclusions façon PRADO. Ajouter ce qui suit dans application.xml après <paths>:

 
<alias id="Pear" path="/chemin/vers/pear" />

...et faites un include des librairies PEAR grâce à Prado::using().

Personal tools
Your user name:

Your password:

MediaWiki