Bonjour,
J'ai une classe de génération du code html d'une liste select vide associée à une classe de génération du code html des options. La particularité est qu'ici, J'utilise ces classes et leurs instances sur deux fichiers distincts. Le premier fichier sert au contrôle, le second sert au traitement qui consiste à remplir les listes d'options vides.
Au départ, dans le contrôleur, je génère une première liste complète et les autres listes avec une seule option vide. Dans le traitement, je génère les options utiles manquantes en fonction du résultat de la première sélection effectuée par l'utilisateur dans le formulaire de rendu pour faire une sélection en plusieurs étapes.
Tout le problème se situe dans le traitement avec le message d'erreur suivant:
The script tried to execute a method or access a property of an incomplete object. Please ensure that the class definition "OptListSelect\OptListSelect" of the object you are trying to operate on was loaded _before_ unserialize() gets called or provide an autoloader to load the class definition
Je ne comprends pas pourquoi plusieurs éléments de la classe sont incomplets.
Dans le fichier de traitement (ligne 9), j'ai placé un var_dump de contrôle qui me donne ceci:array (size=4)
2 =>
object(__PHP_Incomplete_Class)[9]
public '__PHP_Incomplete_Class_Name' => string 'OptListSelect\OptListSelect' (length=27)
private 'options' (OptListSelect\OptListSelect) =>
array (size=1)
0 =>
object(__PHP_Incomplete_Class)[10]
...
private 'groups' (OptListSelect\OptListSelect) =>
array (size=0)
empty
private 'name' (OptListSelect\OptListSelect) => string 'naf[2]' (length=6)
private 'attributes' (OptListSelect\OptListSelect) =>
array (size=2)
'id' => string 'naf2' (length=4)
'required' => string 'required' (length=8)
Je vous donne le code du contrôleur (premier fichier appelé):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| require_once('../classes/moimp/OptListSelect.php');
require_once('../classes/moimp/OptListOption.php');
use OptListSelect\OptListSelect;
use OptListOption\OptListOption;
// Création de la première liste complète (niveau 1)
$aNAF[1] = getNAFsection($language);
$emptyOptionLabel = getDBText($language,16);
$lstNaf[1] = new OptListSelect('naf[1]', ['id'=>'naf1', 'required'=>'required']);
$lstNaf[1]->addOption(new OptListOption('', '', ['label'=>$emptyOptionLabel]));
$sToSelect = ''; // A FINIR
if (!empty($aNAF[1])) {
foreach($aNAF[1] as $aItem){
$aOptions = ($sToSelect == $aItem['id']) ? ['selected'=>'selected']: [];
$lstNaf[1]->addOption(new OptListOption($aItem['code'], $aItem['code'].' - '.$aItem[$language.'_text'], $aOptions));
}
unset($aItem);
}
// Création des listes vides
for ($i=2; $i<=5; $i++) {
$lstNaf[$i] = new OptListSelect("naf[$i]", ['id'=>"naf$i", 'required'=>'required']);
$lstNaf[$i]->addOption(new OptListOption('', '', ['label'=>$emptyOptionLabel]));
$_SESSION['lstNaf'][$i] = $lstNaf[$i];
} |
Jusque là pas de problème, les listes sont générées correctement.
et celui du traitement (après la première sélection par l'utilisateur):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| for ($i=2; $i<=5; $i++) {
$lstNaf[$i] = new OptListSelect("naf[$i]", ['id'=>"naf$i", 'required'=>'required']);
$lstNaf[$i]->addOption(new OptListOption('', '', ['label'=>$emptyOptionLabel]));
$_SESSION['lstNaf'][$i] = $lstNaf[$i];
}
$language = $_SESSION['language'];
$lstNaf = $_SESSION['lstNaf'];
var_dump($lstNaf); // Produit l'affichage ci-dessus
$post = $_POST;
// Liste des options à mettre dans les listes
for ($i=1;$i<=5; $i++){
$j = $i+1;
if (empty($post['naf'][$i]))
break;
$aNAF[$j] = getNAF($language, $j, $post['naf'][$i]); // Collecte des données pour la liste d'options
$sToSelect = ''; // A FINIR
if (!empty($aNAF[$j])) {
foreach($aNAF[$j] as $aItem){
$aOptions = ($sToSelect == $aItem['id']) ? ['selected'=>'selected']: [];
$lstNaf[$j]->addOption(new OptListOption($aItem['code'], $aItem['code'].' - '.$aItem[$language.'_text'], $aOptions));
}
unset($aItem);
}
} |
Suis-je assez clair? Vous faut-il d'autres éléments?
Partager