Création d'une page avec formulaire
Navalex Membre non connecté
Booster Roquette
-
Booster Roquette
- Voir le profil du membre Navalex
- Inscrit le : 12/02/2012
- Site internet
- Groupes :
Alors voilà mon problème:
Je suis en train de créer un module nommé BetaKey.
J'ai donc créé tout les fichiers de base en m'inspirant du module sandbox, j'ai créé mon index.php et un controller pour la page d'accueil ainsi que son fichier template, avec les langs et les liens.
Jusqu'à là tout marche très bien.
Et puis je me suis mis à créer un nouveau controller, pour créer un formulaire.
Donc dans mon index.php j'ajoute le controller avec new UrlControllerMapper('BetakeyFormController', '`^/form/?$`'), au dessus de mon controller d'index.
Voici le fichier BetakeyFormController.php (dans le fichier controllers):
Code PHP :
<?php class BetakeyFormController extends ModuleController { private $view; private $lang; /** * @var FormButtonDefaultSubmit */ private $submit_button; public function execute(HTTPRequestCustom $request) { $this->init(); $form = $this->build_form(); if ($this->submit_button->has_been_submited()) { if ($form->validate()) { $this->view->put_all(array( 'C_RESULT' => true, 'KEY' $form->get_value('key') 'USERNAME' => $form->get_value('username'), 'MAIL' => $form->get_value('mail'), )); } } $this->view->put('form', $form->display()); return $this->generate_response(); } private function init() { $this->lang = LangLoader::get('common', 'BetaKey'); $this->view = new FileTemplate('BetaKey/BetakeyFormController.tpl'); $this->view->add_lang($this->lang); } private function build_form() { $form = new HTMLForm('betakeyForm'); // FIELDSET $fieldset = new FormFieldsetHTML('fieldset', 'Fieldset'); $form->add_fieldset($fieldset); $fieldset->set_description($this->lang['form_desc']); // SINGLE LINE TEXT $fieldset->add_field(new FormFieldTextEditor('key', $this->lang['form_key'], '', array( 'maxlength' => 19, 'minlength' => 19, 'description' => 'Avec les tirets "-"'), array(new FormFieldConstraintRegex('`^[a-z0-9_ ]+$`i')) )); $fieldset->add_field(new FormFieldTextEditor('username', $this->lang['form_username'], '', array( 'maxlength' => 19, 'description' => 'Pseudo minecraft actuel'), array(new FormFieldConstraintRegex('`^[a-z0-9_ ]+$`i')) )); $fieldset->add_field(new FormFieldTextEditor('mail', 'Mail', '', array( 'maxlength' => 255, 'description' => 'Mail de contact !'), array(new FormFieldConstraintMailAddress()) )); // BUTTONS $buttons_fieldset = new FormFieldsetSubmit('buttons'); $this->submit_button = new FormButtonDefaultSubmit(); $buttons_fieldset->add_element($this->submit_button); $form->add_fieldset($buttons_fieldset); return $form; } private function generate_response() { $response = new SiteDisplayResponse($this->view); $graphical_environment = $response->get_graphical_environment(); $graphical_environment->set_page_title($this->lang['module_title'] . ' - ' . $this->lang['title.form_builder']); $breadcrumb = $graphical_environment->get_breadcrumb(); $breadcrumb->add($this->lang['module_title'], BetakeyUrlBuilder::home()->rel()); $breadcrumb->add($this->lang['title.form_builder'], BetakeyUrlBuilder::form()->rel()); return $response; } } ?>
J'ai bien entendu aussi créer le tpl et le BetakeyUrlBuilder
Cependant je tombe sur une page 404...
Cordialement, Navalex.
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
URL ?
Avec ou sans réécriture ?
Cordialement, janus57
Navalex Membre non connecté
Booster Roquette
-
Booster Roquette
- Voir le profil du membre Navalex
- Inscrit le : 12/02/2012
- Site internet
- Groupes :
Je ne sais pas du tout comment marche la réécriture :s
Voici mon fichier BetaKey/util/BetakeyUrlBuilder.class.php
Code PHP :
<?php class BetakeyUrlBuilder { private static $dispatcher = '/BetaKey'; /** * @return Url */ public static function home() { return DispatchManager::get_url(self::$dispatcher, '/'); } /** * @return Url */ public static function form() { return DispatchManager::get_url(self::$dispatcher, '/form'); } } ?>
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
simple si tu tape sur example.org/BetaKey/form et que tu te prend un 404 dans la tête c'est que tu as pas activé la réécriture des URL et que donc cette URL devrait fonctionner : example.org/BetaKey/index.php?url=/form
Ce qui va définir ta réécriture d'URL c'est ça :
Code PHP :
new UrlControllerMapper('BetakeyFormController', '`^/form/?$`')
Exemple avec le module news :
Code PHP :
new UrlControllerMapper('NewsFormController', '`^/([0-9]+)/edit/?$`', array('id')),
Au passage tu as une erreur dans ton premier code à la ligne 24

Cordialement, janus57
Navalex Membre non connecté
Booster Roquette
-
Booster Roquette
- Voir le profil du membre Navalex
- Inscrit le : 12/02/2012
- Site internet
- Groupes :
Code PHP :
Et merci pour l'erreur j'avais oublié la virgule.
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
ton fichier PHP change rien à ce que j'ai dit plus haut

Si tu te prend un 404 dans la tête c'est que ton site de dev n'a pas la réécriture d'activée et/ou pris en charge.
Exemple mon module en cours j'ai 2 URL pour accéder au formulaire suivant que la réécriture est activé ou non.
- localhost/phpboost_v4-1/mymodule/add
- localhost/phpboost_v4-1/mymodule/index.php?url=/add
P.S. je met jamais de majuscule dans les nom des dossiers
Cordialement, janus57
Navalex Membre non connecté
Booster Roquette
-
Booster Roquette
- Voir le profil du membre Navalex
- Inscrit le : 12/02/2012
- Site internet
- Groupes :
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
donc si tout est correcte :
example.org/BetaKey/index.php?url=/form et example.org/BetaKey/form doivent renvoyer ton formulaire si y a pas d'erreur de code PHP, en tout cas de mon côté cela fonctionne sans aucun problème.
Si c'est pas le cas regarde tes logs apache.
Cordialement, janus57
j1.seth Membre non connecté
-
Administrateur
- Voir le profil du membre j1.seth
- Inscrit le : 01/09/2008
- Site internet
- Groupes :
-
Chef de Projet
-
Equipe Développement
Pour prendre en compte l'url rewriting dans ton module tu dois avoir la méthode suivante dans ta classe BetaKeyExtensionPointProvider :
Code PHP :
public function url_mappings() { return new UrlMappings(array(new DispatcherUrlMapping('/BetaKey/index.php'))); }
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
normalement si il a bien changé le code du module Sandbox et pris exemple sur news/articles il devrait avoir un truc dans le genre (doit pas être juste niveau des majuscules) :
Code PHP :
<?php /*################################################## * BetaKeyExtensionPointProvider.class.php * ------------------- * ###################################################*/ class BetaKeyExtensionPointProvider extends ExtensionPointProvider { public function __construct() { parent::__construct('BetaKey'); } public function tree_links() { return new BetaKeyTreeLinks(); } public function url_mappings() { return new UrlMappings(array(new DispatcherUrlMapping('/BetaKey/index.php'))); } } ?>
Perso je me base sur 3 modules : sandbox, articles et news
EDIT :
On peu se baser sur le module bugtracker aussi ou pas ?
Cordialement, janus57
Édité par janus57 Le 28/01/2015 à 21h25
Navalex Membre non connecté
Booster Roquette
-
Booster Roquette
- Voir le profil du membre Navalex
- Inscrit le : 12/02/2012
- Site internet
- Groupes :
janus57 :
Bonjour,
donc si tout est correcte :
example.org/BetaKey/index.php?url=/form et example.org/BetaKey/form doivent renvoyer ton formulaire si y a pas d'erreur de code PHP, en tout cas de mon côté cela fonctionne sans aucun problème.
Si c'est pas le cas regarde tes logs apache.
Cordialement, janus57
donc si tout est correcte :
example.org/BetaKey/index.php?url=/form et example.org/BetaKey/form doivent renvoyer ton formulaire si y a pas d'erreur de code PHP, en tout cas de mon côté cela fonctionne sans aucun problème.
Si c'est pas le cas regarde tes logs apache.
Cordialement, janus57
Alors j'ai une erreur PHP avec le lien sans rewriting, et 404 avec.
Code PHP :
Fatal error: Class 'BetakeyFormController' not found in /home/arkemisf/public_html/kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php on line 81
julienseth78 :
Bonjour,
Pour prendre en compte l'url rewriting dans ton module tu dois avoir la méthode suivante dans ta classe BetaKeyExtensionPointProvider :
Pour prendre en compte l'url rewriting dans ton module tu dois avoir la méthode suivante dans ta classe BetaKeyExtensionPointProvider :
Code PHP :
public function url_mappings() { return new UrlMappings(array(new DispatcherUrlMapping('/BetaKey/index.php'))); }
Il y est..
janus57 :
Bonjour,
normalement si il a bien changé le code du module Sandbox et pris exemple sur news/articles il devrait avoir un truc dans le genre (doit pas être juste niveau des majuscules) :
Perso je me base sur 3 modules : sandbox, articles et news
EDIT :
On peu se baser sur le module bugtracker aussi ou pas ?
Cordialement, janus57
normalement si il a bien changé le code du module Sandbox et pris exemple sur news/articles il devrait avoir un truc dans le genre (doit pas être juste niveau des majuscules) :
Code PHP :
<?php /*################################################## * BetaKeyExtensionPointProvider.class.php * ------------------- * ###################################################*/ class BetaKeyExtensionPointProvider extends ExtensionPointProvider { public function __construct() { parent::__construct('BetaKey'); } public function tree_links() { return new BetaKeyTreeLinks(); } public function url_mappings() { return new UrlMappings(array(new DispatcherUrlMapping('/BetaKey/index.php'))); } } ?>
Perso je me base sur 3 modules : sandbox, articles et news
EDIT :
On peu se baser sur le module bugtracker aussi ou pas ?
Cordialement, janus57
Et parreil tout y est sauf le TreeLink car je n'est pas compris son utilité..
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
moyen que du zip ton module et l’envoie (même si il est pas finie) ?
Car visiblement tu as une erreur de codage quelque part dans tes fichiers.
Cordialement, janus57
Navalex Membre non connecté
Booster Roquette
-
Booster Roquette
- Voir le profil du membre Navalex
- Inscrit le : 12/02/2012
- Site internet
- Groupes :
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
Navalex :
Oui je t'envois ca par message privé, à condition que tu garde le nom du site etc.. pour toi. :/
Bonjour,
perso je veux juste le Debug en local, même pas besoin du nom du site (sauf si il est cité dans les fichiers).
Car si tu as bien fait la base je devrait pouvoir l'installer sur ma V4.1 en local et donc debug sans trop de problème, et au pire des cas je passe le relais aux dev's.
Cordialement, janus57
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie