Aide - Recherche - Membres - Calendrier
Version complète : Pb de propriété dans une class
Forum Développeur - Administration serveur, programmation et base de données > Programmation > PHP
acidline
Bonjour à tous,

Je suis en train de coder une class qui transforme un fichier xml en fomulaire XHTML. Vous allez me dire pourquoi ne pas utilisez une feuille de style xslt et c'est réglé ! je vais répondre que c'est pour la forme et la performence... icon_neutral.gif

Bref, voici le problème, je vais écrire que des portions des code, pas besoin de s'embêter !!!

Donc :

PHP

class FormBuilder implements IForm {

private $database;
private $dataOfMyObject = array(); // propriété qui m'embête !
private $view = '';

public function __construct() {
bla bla bla
}

public function getDataFromBdd($id, $table) {
$sql = "SELECT * FROM $table WHERE id='$id'";
$this->dataOfMyObject = $this->database->getRows($sql);
}

public function parseFile($file) {
$this->setFile($file);
$this->parseFormTag();
$this->parseElements();
}

private function parseElements() {
echo '<pre>'; var_dump($this->dataOfMyObject); echo '</pre>';
}

plein de bla bla bla
}


il se trouve que ma propriété $this->dataOfMyObject retourne un array vide dans la méthode parseElements()

si je créer une méthode à la con du style

PHP

public function getData() {
return $this->dataOfMyObject;
}


la méthode me retourne bien un array avec mes valeurs...

je vois pas mon erreur icon_rolleyes.gif

merci de votre aide

Nico

neolao
ça veut dire que parseElements est exécuté trop tôt :/

t'as le reste du code ?
si c'est trop long, simplifie
acidline
voici la class

PHP

class FormBuilder implements IForm {

private $database;
private $dataOfMyObject = array();
private $view = '';


public function __construct($file = '', $mode='CLASSICAL', $action) {
$this->_mode = $mode;
$this->_action = $action;
if(!empty($file)) $this->parseFile($file);
}

public function setMode($mode) {
$this->_mode = $mode;
}

//methode pour affichage des données si modif
public function setView($view = 'add', $table, $id = NULL, $registry) {

$this->database = $registry['database'];
$this->view = $view;

switch ($this->view) {
case 'update' :
if((int)$id && (string)strtolower($table) ) { $this->getDataFromBdd($id, $table); }
break;
}
}

//recuperation des données en BDD
public function getDataFromBdd($id, $table) {
$sql = "SELECT * FROM $table WHERE id='$id'";
$this->dataOfMyObject = $this->database->getRows($sql);
}


public function build() {

if(!sizeof($this->_form)) return;

// the output
$str='';

if(!strcmp($this->_mode,self::mtable)) {$str.="<table>\n";}
foreach($this->_form as $forminfo) {
if(!is_array($forminfo)) continue;
$label = $forminfo['label'];
$data = $forminfo['data'];

if($data instanceof FormElement) {

if($data->isForm()) $str.=$data->build()."\n";
else {
$str.="\t";


if(!strcmp($this->_mode,self::mtable)) {
$str.="<tr><td>".$label."</td>";
$str.="<td>".$data->build()."</td></tr>\n";
}

else {
$str.=$label.'&nbsp;';
$str.=$data->build();
// print as column (with a <br> tag)
if(!strcmp($this->_mode,self::mcolumn)) $str.='<br />';
$str.="\n";
}
}
}
}
if(!strcmp($this->_mode,self::mtable)) $str.="</table>\n";
$str.= FormElement::endForm()."\n";
return $str;
}

public function parseFile($file) {

$this->setFile($file);
$this->parseFormTag();
$this->parseElements();

}

public function addElement($type,$name,$param=array(),$opt=array(), $url='', $label='') {
$f = new FormElement($type, $name, $param, $opt, $url);
$this->_form[] = array('label'=>$label, 'data'=>$f);
}


public function startForm($url,$name='noName',$uparam=array(),$param=array()) {
$this->addElement('form', $name, $uparam, $param,$url);
}

private function parseElements() {

if(sizeof($this->_xml->elements->element)) {
foreach($this->_xml->elements->element as $el) {

$param = array();
$opt = array();

$type=isset($el["type"])?(string)$el["type"]:"";
$name=isset($el["name"])?(string)$el["name"]:"";
$label=isset($el["label"])?(string)$el["label"]:"";

if(sizeof($el->eparameter)) {
foreach($el->eparameter as $ep) {
$n=isset($ep["name"])?(string)$ep["name"]:"";
$v=isset($ep["value"])?(string)$ep["value"]:"";
if($n) $param[$n]=$v;
}
}

if(sizeof($el->eoption)) {
foreach($el->eoption as $eo) {
$eov = isset($eo["value"])?(string)$eo["value"]:"";
$eol = isset($eo["label"])?(string)$eo["label"]:"";
if($eov) $opt[$eov] = $eol;
}
}
$this->addElement($type,$name,$param,$opt,'',$label);
}
}
$this->addElement('submit','Valider',array('value'=>'Valider'));

}


private function parseFormTag() {

$fp = array(); //parametres du formulaire (method, name,...)
$fu = array('action'=> $this->_action); // parametres d'url
$furl = HTTP_SERVER_ADMIN . 'index.php'; // url d'envoi
$fname = ''; // nom

// va chercher les parametres du formulaire
if(sizeof($this->_xml->formparameters->fparameter)) {
foreach($this->_xml->formparameters->fparameter as $xfp) {
if(isset($xfp["name"])) {
// va chercher le nom du fomulaire
if(!strcmp('name',strtolower((string)$xfp["name"]))) $fname=(string)$xfp["value"];
else $fp[strtolower((string)$xfp["name"])]=(string)$xfp["value"];
}
}
}

// va chercher les parmetres d'url
if(sizeof($this->_xml->urlparameters->uparameter)) {
foreach($this->_xml->urlparameters->uparameter as $xup) {
if(isset($xup["name"])) {
// va chercher l'url
if(!strcmp('url',strtolower((string)$xup["name"]))) $furl=(string)$xup["value"];
else $fu[strtolower((string)$xup["name"])] = (string)$xup["value"];
}
}
}

// vérifications
if(!array_key_exists('method',$fp)) $fp['method']='post';
if(empty($furl)) $furl = PHPSELF;
if(empty($fname)) $fname='no_name';
// enregistre le formulaire
$this->addElement('form',$fname,$fu,$fp,$furl);
}

/* verifie que le xml existe et le charge */
private function setFile($file) {
if(file_exists(XMLDIR.$file.XMLEXT)) {
$this->_xmlfile=XMLDIR.$file.XMLEXT;
$this->_xml=simplexml_load_file($this->_xmlfile);
return;
}
throw new Exception('File : '.$file.' does not exist.');
}
}


Exemple d'utilisation :

PHP

require('form_xml/class_form.php');

try {

define('XMLDIR','form_xml/xmlforms/');
define('XMLEXT','.xml');

$f = new FormBuilder('actualite', 'TABLE', 'update');
$f->setView('update', 'actualites', (int)$id_actu, $this->registry);
$template->set('form', utf8_decode($f->build()) );
}
catch(Exception $e) { print($e->getMessage());
}


j'ai enlevé quelques lignes, la déclaration des variables etc...
voili voilou...
acidline
excuse moi, tu as raison, c'est tout simplement que j'ai pas fait gaffe !!!

merci d'avoir vu l'erreur... gourou.gif

Nico
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'informations, la mise en page et les images, veuillez cliquer ici.
Invision Power Board © 2001-2008 Invision Power Services, Inc.