Tutoriel : Le framework puzzleApp

Plus qu'un tutoriel vous retrouvez ici le détail du coeur du framework

Les entités

Les entités permettent de manipuler facilement votre base de données. Une entité métier correspond à une table, il est possible de faire des liens entre les entités, facilitant ainsi vos développements

1. Création d'un nouvelle entité

L'ide posséde un onglet entité vous permettant de créer automatiquement vos fichiers et script de base de données. La partie Field définie les champs que vous allez créer, la partie Key permet de faire des Foreign Key sur les autres tables.

La création de l'entité via l'ide va :

  • Créer un script. sql correspondant à votre table
  • Ajouter ce script dans l'install.sql
  • Ajouter un script de suppression dans unistall.sql

Ce système permet d'ajouter et supprimer des applications proprement et purger votre base de données

 

2. Les propriétés d'une entité

Exemple de l'entité d'article de blog 

class BlogArticle extends Entity  
{
    //Entite lié
    protected $Category;

    //Constructeur
    function __construct($core)
    {
        //Version
        $this->Version ="2.0.0.0"; 

        //Nom de la table 
        $this->Core=$core; 
        $this->TableName="BlogArticle"; 
        $this->Alias = "BlogArticle"; 

        $this->BlogId = new Property("BlogId", "BlogId", NUMERICBOX,  true, $this->Alias); 
        $this->UserId = new Property("UserId", "UserId", NUMERICBOX,  true, $this->Alias); 
        $this->Actif = new Property("Actif", "Actif", TEXTBOX,  false, $this->Alias); 
        $this->Name = new Property("Name", "Name", TEXTBOX,  true, $this->Alias); 
        $this->Code = new Property("Code", "Code", TEXTBOX,  true, $this->Alias); 
        $this->KeyWork = new Property("KeyWork", "KeyWork", TEXTAREA,  false, $this->Alias); 
        $this->Description = new Property("Description", "Description", TEXTAREA,  false, $this->Alias); 
        $this->Content = new Property("Content", "Content", TEXTAREA,  false, $this->Alias); 
        $this->DateCreated = new Property("DateCreated", "DateCreated", DATEBOX,  false, $this->Alias); 

        $this->CategoryId = new Property("CategoryId", "CategoryId", NUMERICBOX,  true, $this->Alias); 
        $this->Category = new EntityProperty("Apps\Blog\Entity\Blog\Category", "CategoryId"); 


        //Creation de l entité 
        $this->Create(); 
    }

    /*
    * Get the Name for url
    */
   function GetUrlCode()
   {
       return Format::ReplaceForUrl($this->Code->Value, false);
   }

    /*
     * Get the Image og the article
     */
    function GetImage()
    {
        $fileName = "Data/Apps/Blog/".$this->BlogId->Value. "/".$this->IdEntite. "_96.png";

        if(file_exists($fileName))
        {
            $image = new Image($this->Core->GetPath("/".$fileName));
            $image->Title = $this->Name->Value;

        }
        else
        {
            $image = new Image($this->Core->GetPath("/images/nophoto.png"));
        }

        return $image->Show();
    }

 

2.1 Les Property 

 $this->Name = new Property("Name", "Name", TEXTBOX,  true, $this->Alias); 

 Le constructeur de Property contient 4 paramétres :

  • Le Nom de la propriété
  • Le Nom correspondant en base de données
  • Le type de controle associé ( pour des controle spécifiques ou CRUD)
  • L'alias qui sera utilisé.

Accès au valeur de l'objet 

$article = new BlogArticle($this->Core);
$article->GetById(1);

echo $article->Name->Value;

 

2.1 Les EntityProperty

Ce type de propriété permet de faire une liaison directe sur une entité lié.

Les entités liés sont chargés à la demande afin d'éviter les requêtes en base de données inutiles.

Exemple de déclaration

Ajout de la propriété dans la définition 

//Entite lié
protected $Category;

Création de la liaison dans le constructeur 

$this->Category = new EntityProperty("Apps\Blog\Entity\Blog\Category", "CategoryId"); 

Le constructeur d'EntityProperty attend deux paramétres

  • le namespace complet de la classe liés
  • L'identifiant qui va faire le lien

 

Exemple d'utilisation

echo $article->Category->Value->Name->Value;

 

 

2.3 Les fonctions des entités 

Il est possible d'ajouter des fonctions qui vont effectuer certains traitements ou requêtes spécifiques

/*
 * Get the Name for url
 */
 function GetUrlCode()
 {
     return Format::ReplaceForUrl($this->Code->Value, false);
 }

 /*
  * Get the Image og the article
  */
  function GetImage()
  {
      $fileName = "Data/Apps/Blog/".$this->BlogId->Value. "/".$this->IdEntite. "_96.png";

      if(file_exists($fileName))
      {
          $image = new Image($this->Core->GetPath("/".$fileName));
          $image->Title = $this->Name->Value;
       }
       else
       {
           $image = new Image($this->Core->GetPath("/images/nophoto.png"));
       }
        return $image->Show();
   }
   
 /*
  * Get A small Description
  */
  function GetSmallDescription()
  {
      return Format::Tronquer($this->Description->Value, 250);
  }

 

Appel des fonctions 

$article->GetImage();

 

Vous pouvez également utiliser ces propriétés et fonction directement dans les vues .

 

{{foreach Articles}}
   <div class='col-md-4'>
      <div>
        {{element->Category->Value->Name->Value}}
      </div>

      <div class='col-md-12' >
           {{element->GetImage()}}
      </div>
      <div class='col-md-12'>
           <h4>{{element->Name->Value}}</h4>
           {{element->GetSmallDescription()}}
      </div>
      <div  class='col-md-12'>
           <a href='http://puzzleapp.org/Blog/Article/)}}{{element->GetUrlCode(' >Lire l´article </a>
      </div>
   </div>
{{/foreach Articles}}