Citat:
Ursprungligen postat av
AVGASBARN
Vad är en modul? Är det "en mapp med kod"? I grund och botten en klass som implementerar något interface?
En modul är en fil som inkluderas. Det ser ut ungefär så här på de dynamiska formulärens action-sida:
[PHP]// $selectedModules innehåller endast de moduler kunden valt till detta formulär
foreach($selectedModules as $moduleID){
include("modules/module{$moduleID}.php");
}[/PHP]
I kundernas backend där de väljer moduler, försöker jag få till någonting liknande detta:
[PHP]
// getFormFields returnerar de formulärfält som kunden valt.
// tex firstname, lastname, email etc
$formFields = getFormFields();
while ($row = mysqli_fetch_assoc($resAllModules)) {
//Pudelns kärna. Jag vill kunna spara ett logiskt uttryck
// i "requiredFields" som jag kan jämföra mot $formFields
// för att avgöra om kunden får välja denna modul eller ej.
if(requiredFieldsExist($row["requiredFields"],$formFields)){
echo "<input type='checkbox' value='{$row["moduleID"]}'> {$row["moduleName"]}";
}
else{
echo "{$row["moduleName"]} kan ej väljas eftersom ditt formulär saknar fält som krävs";
}
}
[/PHP]
Mitt problem är hur informationen $row["requiredFields"] ska lagras i databasen och hur funktionen "requiredFieldsExists()" ska byggas upp.
Om jag förstår ditt förslag korrekt så tycker du att jag ska bygga upp varje varje modul som en klass som har en metod requiredFields(). Från backend så itererar jag sedan över samtliga modul-klassfiler, i stil med:
[PHP]if ($handle = opendir('/modules/')) {
while (false !== ($entry = readdir($handle))) {
include("/modules/$entry");
$className = basename($entry);
$module = new $$classname();
if($module->requiredFields($formFields)){
echo "<input type='checkbox' value='{$module->moduleId}'> {$module->modulename}";
}
else{
echo "{$module->modulename} kan ej väljas eftersom ditt formulär saknar fält som krävs";
}
}
closedir($handle);
}[/PHP]
Det kan fungera men ett problem är att jag måste skriva om alla våra hundratals moduler, samt att det intuitivt känns fel att läsa in och instansiera hundratals klasser för att visa tillgängliga moduler, med jag tänker kanske fel där.