Sto creando un validatore che sarà in grado di gestire condizioni complesse consentendo allo sviluppatore di utilizzare un'istruzione condizionale nelle regole delle condizioni.Provare a non utilizzare eval() in php per valutare una stringa con un'istruzione di condizione
Prendete questo esempio con una serie di regole:
...
"element_name":{
"required": "conditional",
"conditions" : {
"requirements" : "(4 < 5)",
"requirements" : "('something' == 'something_else')"
}
}
...
ciò che il PHP poi fare è un ciclo tra quelli requirements
e valutarli come codice per restituire un valore booleano che determinerà se è necessario o meno l'elemento .
Il problema con l'utilizzo della funzione eval()
è abbastanza ovvio. Quindi mi chiedo, dato che le dichiarazioni condizione sono quello che sarà consentito solo, c'è un modo più sicuro di fare questo rispetto:
$result = eval(element_name->requirements[0]);
Grazie ragazzi.
---- ----- AGGIORNAMENTO
Grazie Mike e tutti per le idee, vorrei poter contrassegnare tutti come la risposta perché per essere onesti, ho finito per usare un po ' dell'idea di tutti. Più di Mike, quindi lo capisce.
Quindi, questo è probabilmente qualcosa che verrà esaminato in futuro perché è un metodo piuttosto interessante di convalidare in modo condizionale un campo. Il mio obiettivo è creare un modo intuitivo per affrontare questo. Mi è piaciuta l'idea di dare semplicemente uno schiaffo in una dichiarazione condizionale nel file di configurazione di json. Ovviamente, questo comporterebbe qualche serio rischio per la sicurezza o un motore di parsing super complesso, quindi ho finito col richiedere allo sviluppatore di imparare il nostro metodo di linguaggio condizionale, ma come vedrete, l'ho mantenuto abbastanza simile a quello originale. Penso che sia importante avere API semplici altrimenti scoraggerebbe lo sviluppo sulla tua piattaforma. Check it out:
"element_name":{
"required": "conditional",
"conditions" : {
"<" : ['4', '5'],
"==" : [':element_id', ':other_element'], // will grab the values of those elements and compare
"exp" : [['something', '==', 'something_else'], 'OR', [':other_element', '!=', '0']]
}
}
In che modo esattamente lo sviluppatore fornisce l'elenco dei requisiti? – Mike
Mike Devo scusarmi, ho corretto il mio codice. Ma una volta che lo sviluppatore ha contrassegnato il 'required' come' condizionale', ci si aspetta che lo sviluppatore fornisca una 'condizione' obj/array contenente una lista di condizioni come visto sopra. –
@FelipeTadeo http://www.php.net/manual/en/yaml.installation.php Sto avendo un problema simile e lo userei se potessi per i condizionali, dato che verrà eseguito molto più velocemente nella libreria libYAML C . Sfortunatamente ho bisogno che funzioni sui sistemi di altre persone senza installare un modulo. Tuttavia, se è possibile utilizzare YAML - json è in realtà un sottoinsieme e YAML ha grandi funzionalità di abilitazione logica. –