Les formulaires sont essentiels dans un site internet. On en trouve sur toutes les pages, pour se connecter, créer un compte, laissez un email ...
Les formulaires sont avant tout des widget possédant toute la mécanique Php mais aussi JS.
Votre application doit donc contenir un dossier Widget, pui s un dossier par formulaire. Pour notre exemple c'est ItineraireForm.
Ce dossier contient alors les fichiers suivant :
C'est la classe de notre formulaire :
namespace Apps\Planificateur\Widget\ItineraireForm;
use Core\Control\Form\Form;
use Core\View\View;
use Core\View\ElementView;
class ItineraireForm extends Form {
/**
* Constructeur
*/
function __construct($core = "", $data = "") {
$this->Core = $core;
$this->Data = $data;
//On le fait ici pour avoir le formuaire a l'affichage mais aussi a la validation
$this->Init($data);
}
/**
* Initialisation
*/
function Init($data) {
$this->form = new Form("itineraireForm", $data);
$this->form->SetView(__DIR__ . "/View/index.tpl", $this->Core);
$this->form->SetAction("/View/index.tpl");
$this->form->Add(array("Type" => "Hidden",
"Id" => "Id",
));
$this->form->Add(array("Type" => "TextBox",
"Id" => "Name",
"Validators" => ["Required"]
));
$this->form->Add(array("Type" => "TextArea",
"Id" => "Description",
"Validators" => ["Required"]
));
$this->form->Add(array("Type" => "TextBox",
"Id" => "CountryStart",
"Validators" => ["Required"]
));
$this->form->Add(array("Type" => "TextBox",
"Id" => "CityStart",
"Validators" => ["Required"]
));
$this->form->Add(array("Type" => "TextBox",
"Id" => "CountryEnd",
"Validators" => ["Required"]
));
$this->form->Add(array("Type" => "TextBox",
"Id" => "CityEnd",
"Validators" => ["Required"]
));
$this->form->Add(array("Type" => "Button",
"Id" => "btnSaveItineraire",
"Value" => "Save",
"CssClass" => "btn btn-primary"
));
}
/* * *
* Generer le formulaire
*/
function Render() {
return $this->form->Render();
}
/* * *
* Valide les donnees selon les differents formulaires
*/
function Validate($data = "") {
$errors = $this->form->Validate($this->Data);
return $errors;
}
/* * *
* Charge les controls avec les donnees de l'entite
*/
function Load($itineraire) {
$this->form->Load($itineraire);
}
/* * *
* Charge l'entite avec les donnees des differents formulaires
*/
function Populate($product) {
}
/* * *
* Gestion des erreurs
*/
function Error() {
$errors[] = $this->form->errors;
return json_encode(array("statut" => "Error", "message" => $errors));
}
}
var ItineraireForm = function(){};
/***
* Initialise le formulaire
* @returns {undefined}
*/
ItineraireForm.Init = function(){
Event.AddById("btnSaveItineraire", "click", ItineraireForm.SaveItineraire);
};
/***
* Obtient l'id de l'itineraire courant
*/
ItineraireForm.GetId = function(){
return Form.GetId("itineraireForm");
};
/*
* Sauvegare l'itineraire
*/
ItineraireForm.SaveItineraire = function(e){
if(Form.IsValid("itineraireForm"))
{
var data = "Class=Planificateur&Methode=SaveItineraire&App=Planificateur";
data = Form.Serialize("itineraireForm");
Request.Post("Ajax.php", data).then(data => {
data = JSON.parse(data);
if(data.statut == "Error"){
Form.RenderError("itineraireForm", data.message);
} else{
Form.SetId("itineraireForm", data.data.Id);
Animation.Notify("Itineraire sauvegardee");
//On passe aux etapes
FrontController.ShowTool("stepTool");
}
});
}
};
{{form->Open()}}
{{form->Error()}}
{{form->Success()}}
{{form->Render(Id)}}
<div>
<label>Nom</label>
{{form->Render(Name)}}
</div>
<div>
<label>Description</label>
{{form->Render(Description)}}
</div>
<div>
<label>Pays de depart</label>
{{form->Render(CountryStart)}}
</div>
<div>
<label>Ville de depart</label>
{{form->Render(CityStart)}}
</div>
<div>
<label>Pays d'arrive</label>
{{form->Render(CountryEnd)}}
</div>
<div>
<label>Ville d'arrive</label>
{{form->Render(CityEnd)}}
</div>
<div class='center' >
{{form->Render(btnSaveItineraire)}}
</div>
{{form->Close()}}
$this->form->Add(array("Type" => "TextBox",
"Id" => "CountryStart",
"Validators" => ["Required"]
));
On défini ici le type de contrôles et les différents validateurs.
dans la view :
{{form->Render(CityEnd)}}
Cette ligne sera remplacé par le bon controle.
En js deux lignes importantes :
Form.IsValid("itineraireForm") ;
Form.Serialize("itineraireForm");
La premiére lance la vérification du formulaire et va ajouter des libellé d'érreur en dessous des champs non valide.
La deuxième serialise le formulaire sour forme de clé => valeur.