Comment fonctionne la fonction save() ? [Réglé]
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
est-ce qu'un dev's peu expliquer un peu comment fonctionne la fonction save ?
Car j'ai un problème, les valeurs ne sont pas enregistré en BDD et sont remplacé par des 0.
Exemple :
Formulaire :
Code PHP :
//LONGUEUR DU PARCOURS (km)
$fieldset->add_field(new FormFieldTextEditor('track_length', $this->lang['form_track_length'], '', array(
'maxlength' => 8, 'description' => $this->lang['form_track_length_desc'])
));
//DENIVELE DU PARCOURS
$fieldset->add_field(new FormFieldTextEditor('track_elevation', $this->lang['form_track_elevation'], '', array(
'maxlength' => 8, 'description' => $this->lang['form_track_elevation_desc'])
));
Traitement dans la fonction save()
Code PHP :
//if faux donc on passe directe au else dans l'exemple. else { // autre bout de code $track_length = $this->form->get_value('track_length'); $track_elevation = $this->form->get_value('track_elevation'); } $tracks->set_track_length($track_length); $tracks->set_track_elevation($track_elevation);
fonction set_track_length et set_track_elevation
Code PHP :
// en début de class private $_track_length; private $_track_elevation; //après les private + const public function set_track_length($track_length){ $this->_track_length = $track_length; } public function set_track_elevation($track_elevation){ $this->_track_elevation = $track_elevation; } public function get_properties() { return array( 'track_length' => $this->get_track_length(), 'track_elevation' => $this->get_track_elevation() ); } public function set_properties(array $properties) { $this->set_track_length($properties['track_length']); $this->set_track_elevation($properties['track_elevation']); }
Après enregistrement niveau SQL j'ai du 0.
Et au niveau structure SQL cela donne :
Code PHP :
j'ai utilisé decimal car le nombre peut être un entier (0 -> 4000) ou un nombre à virgule (0.0001 -> 4000.9999), mais le test a été réalisé avec un nombre entier (10 en l’occurrence).
Et si je dump les valeurs de $track_length et $track_elevation j'ai :
Citation :
10,0000
10.0000
10.0000
(j'ai fait le test avec un . et une virgule pour vois si cela change quelque chose, mais non).
Citation :
10,0000
[0] /kernel/framework/util/Debug.class.php:188 - Debug::print_stacktrace()
[1] /MyModule/controllers/MyModuleAddController.class.php:278 - Debug::stop(string)
[2] /MyModule/controllers/MyModuleAddController.class.php:31 - MyModuleAddController->save()
[3] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:87 - MyModuleAddController->execute(HTTPRequestCustom)
[4] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:59 - UrlControllerMapper->do_call()
[5] /kernel/framework/mvc/dispatcher/Dispatcher.class.php:67 - UrlControllerMapper->call()
[6] /kernel/framework/mvc/dispatcher/DispatchManager.class.php:43 - Dispatcher->dispatch()
[7] /MyModule/index.php:29 - DispatchManager::dispatch(array)
[URL] /phpboost_v4-1/MyModule/add
10,0000
[0] /kernel/framework/util/Debug.class.php:188 - Debug::print_stacktrace()
[1] /MyModule/controllers/MyModuleAddController.class.php:278 - Debug::stop(string)
[2] /MyModule/controllers/MyModuleAddController.class.php:31 - MyModuleAddController->save()
[3] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:87 - MyModuleAddController->execute(HTTPRequestCustom)
[4] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:59 - UrlControllerMapper->do_call()
[5] /kernel/framework/mvc/dispatcher/Dispatcher.class.php:67 - UrlControllerMapper->call()
[6] /kernel/framework/mvc/dispatcher/DispatchManager.class.php:43 - Dispatcher->dispatch()
[7] /MyModule/index.php:29 - DispatchManager::dispatch(array)
[URL] /phpboost_v4-1/MyModule/add
Citation :
10.0000
[0] /kernel/framework/util/Debug.class.php:188 - Debug::print_stacktrace()
[1] /MyModule/controllers/MyModuleAddController.class.php:278 - Debug::stop(string)
[2] /MyModule/controllers/MyModuleAddController.class.php:31 - MyModuleAddController->save()
[3] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:87 - MyModuleAddController->execute(HTTPRequestCustom)
[4] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:59 - UrlControllerMapper->do_call()
[5] /kernel/framework/mvc/dispatcher/Dispatcher.class.php:67 - UrlControllerMapper->call()
[6] /kernel/framework/mvc/dispatcher/DispatchManager.class.php:43 - Dispatcher->dispatch()
[7] /MyModule/index.php:29 - DispatchManager::dispatch(array)
[URL] /phpboost_v4-1/MyModule/add
10.0000
[0] /kernel/framework/util/Debug.class.php:188 - Debug::print_stacktrace()
[1] /MyModule/controllers/MyModuleAddController.class.php:278 - Debug::stop(string)
[2] /MyModule/controllers/MyModuleAddController.class.php:31 - MyModuleAddController->save()
[3] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:87 - MyModuleAddController->execute(HTTPRequestCustom)
[4] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:59 - UrlControllerMapper->do_call()
[5] /kernel/framework/mvc/dispatcher/Dispatcher.class.php:67 - UrlControllerMapper->call()
[6] /kernel/framework/mvc/dispatcher/DispatchManager.class.php:43 - Dispatcher->dispatch()
[7] /MyModule/index.php:29 - DispatchManager::dispatch(array)
[URL] /phpboost_v4-1/MyModule/add
Je ne peu pas donner le code complet en public, donc si besoin je peu passer tout le module en MP.
Pour les 3/4 du code c'est une adaptation par rapport à ce que j'ai vu dans le module articles + news.
EDIT :
MAJ à 19H03
Et désolé pour le gros bloc :/
Cordialement, janus57
Édité par janus57 Le 12/02/2015 à 19h03
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
au risque de paraitre idiot, je suis censé l'avoir où ?
Car à première vu j'en ai pas et comme dit les 3/4 du code c'est adapté du module "articles" (et "news" aussi) et là les tests sont fait sur une V4.1
Cordialement, janus57
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement
Si c'est le cas, vérifies le type du résultat que tu donnes, peux être que c'est parce que c'est une chaine ?
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
Citation :
Si c'est le cas, vérifies le type du résultat que tu donnes, peux être que c'est parce que c'est une chaine ?
j'avais essayé en changeant en float, rien changé.
Citation :
Fait un Debug::stop() de ta fonction get_proterties() dans la fonction d'ajout dans MyModuleService et regarde si c'est bien la valeur que tu souhaites.
j'ai pas, la fonction est dans MyModule.class.php dans le dossier /services
Et elle est seulement utilisé dans MyModuleService.class.php /services et y a ceci :
Code PHP :
public static function add(Tracks $tracks) { $result = self::$db_querier->insert(TracksSetup::$tracks_table, $tracks->get_properties()); return $result->get_last_inserted_id(); }
Et si je met le Debug là dedans il me sort ceci :
Citation :
Array
(
[id] =>
[name] => test
[track_length] => 0
[track_elevation] => 0
)
[0] /kernel/framework/util/Debug.class.php:188 - Debug::print_stacktrace()
[1] /mymodule/services/MyModuleService.class.php:24 - Debug::stop(array)
[2] /mymodule/controllers/MyModuleAddController.class.php:245 - MyModuleService::add(MyModule)
[3] /mymodule/controllers/MyModuleAddController.class.php:31 - MyModuleAddController->save()
[4] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:87 - MyModuleAddController->execute(HTTPRequestCustom)
[5] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:59 - UrlControllerMapper->do_call()
[6] /kernel/framework/mvc/dispatcher/Dispatcher.class.php:67 - UrlControllerMapper->call()
[7] /kernel/framework/mvc/dispatcher/DispatchManager.class.php:43 - Dispatcher->dispatch()
[8] /mymodule/index.php:29 - DispatchManager::dispatch(array)
[URL] /phpboost_v4-1/mymodule/add
Array
(
[id] =>
[name] => test
[track_length] => 0
[track_elevation] => 0
)
[0] /kernel/framework/util/Debug.class.php:188 - Debug::print_stacktrace()
[1] /mymodule/services/MyModuleService.class.php:24 - Debug::stop(array)
[2] /mymodule/controllers/MyModuleAddController.class.php:245 - MyModuleService::add(MyModule)
[3] /mymodule/controllers/MyModuleAddController.class.php:31 - MyModuleAddController->save()
[4] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:87 - MyModuleAddController->execute(HTTPRequestCustom)
[5] /kernel/framework/mvc/dispatcher/UrlControllerMapper.class.php:59 - UrlControllerMapper->do_call()
[6] /kernel/framework/mvc/dispatcher/Dispatcher.class.php:67 - UrlControllerMapper->call()
[7] /kernel/framework/mvc/dispatcher/DispatchManager.class.php:43 - Dispatcher->dispatch()
[8] /mymodule/index.php:29 - DispatchManager::dispatch(array)
[URL] /phpboost_v4-1/mymodule/add
Et le fichier MyModule.class.php dans /services ressemble en gros à ça :
Code PHP :
<?php class MyModule { private $_id; private $_name; private $_track_length; private $_track_elevation; const NOT_APPROVAL = 0; const APPROVAL_NOW = 1; const APPROVAL_DATE = 2; /* Tous les get_ */ public function get_id(){ return $this->_id; } public function get_name(){ return $this->_name; } public function get_track_length(){ return $this->_track_length; } public function get_track_elevation(){ return $this->_track_elevation; } /* Tous les set_ */ public function set_id($id){ $this->_id = $id; } public function set_name($name){ $this->_name = $name; } public function set_track_length($track_length){ $this->_track_length = $track_length; } public function set_track_elevation($track_elevation){ $this->_track_elevation = $track_elevation; } public function get_properties() { return array( 'id' => $this->get_id(), 'name' => TextHelper::htmlspecialchars($this->get_name()), 'track_length' => $this->get_track_length(), 'track_elevation' => $this->get_track_elevation() ); } public function set_properties(array $properties) { $this->_id = $properties['id']; $this->_name = $properties['name']; $this->set_track_length($properties['track_length']); $this->set_track_elevation($properties['track_elevation']); } public function init_default_properties() { $this->_track_length = 0; $this->_track_elevation = 0; } public function get_array_tpl_vars() { return array( 'ID' => $this->_id, 'NAME' => $this->_name, 'TRACK_LENGTH' => $this->_track_length, 'TRACK_ELEVATION' => $this->_track_elevation ); } } ?>
Sinon au besoin je peu te donner le module au complet en MP, ce qui au passage me permettrait d'avoir un avis de dev sur le "bordel".
Cordialement, janus57
ReidLos Membre non connecté
-
Modérateur
- Voir le profil du membre ReidLos
- Inscrit le : 27/02/2009
- Site internet
- Groupes :
-
Equipe Développement

Mais te connaissant, tu trouveras la solution

Les fonctions de debug sont vraiment pratique pour ce genre cas. Fais des Debug::stop() à chaque endroit pour vérifier la valeur
janus57 Membre non connecté
-
Booster Fusée
- Voir le profil du membre janus57
- Inscrit le : 07/12/2007
- Groupes :
-
Equipe Assistance
ReidLos :
Tu peux m'envoyer l'archive par MP je vais jeter un coup d'oeil 
Mais te connaissant, tu trouveras la solution
Les fonctions de debug sont vraiment pratique pour ce genre cas. Fais des Debug::stop() à chaque endroit pour vérifier la valeur

Mais te connaissant, tu trouveras la solution

Les fonctions de debug sont vraiment pratique pour ce genre cas. Fais des Debug::stop() à chaque endroit pour vérifier la valeur

Bonjour,
je sais, j'ai debug dans tout les coin, j'ai même essayer avec du var_dump et du print_r, rien trouvé :/
J'avais déjà se problème sur une autre entrée en BDD que j'avais contourné via une fonction fait main, mais là rien j'y arrive vraiment pas, j'ai essayé en laissant la valeur en string puis en float, j'ai pas essayez en int car cela va casser les nombres à virgule, y a surement une petite subtilité qui m'échappe pour le coup.
Je te fait le MP de suite.
EDIT :
MP envoyé et merci d'avance

Cordialement, janus57
Édité par janus57 Le 12/02/2015 à 23h05
Répondre
Vous n'êtes pas autorisé à écrire dans cette catégorie