Enregistrer du code php venant d'un formulaire


(Duclik) #1

Bonjour,

j’aimerai enregistrer un morceau de code php (un tableau) venant d’un formulaire, après l’avoir sérializé, dans la base de données.

Le problème n’est pas l’enregistrement et le sérialisation beforeSave, afterFind, mais le fait que les données reçues sont de type string:


string 'array('site/page', 'view' => 'contact')' (length=39)

Alors qu’il faudrait qu’elle soit interprétée comme du php pour pouvoir la sérializer et l’exploiter correctement par php.

Comment feriez-vous? Y a t-il une règle de validation adaptée dans le modèle ActiveRecord?

Merci d’avance, là je coince et ça ne doit pas être compliqué!

Clem


(Luc Pfister) #2

Salut,

si je comprends bien, tu as un formulaire du genre: (Q: question, R: réponse saisie)

Q: controller/action => R: site/page

Q: paramètre => R: contact

Avec ce formulaire tu veux créer une chaîne à stocker dans la bdd sous forme de varchar:


array('site/page', 'view' => 'contact')

Je ne comprends pas trop ton histoire de serialisation de beforeSave et d’afterFind, cela me semble bien compliqué pour une opération simple de ce genre.


(Duclik) #3

Oui, je pourrais me débrouiller avec plusieurs champs, et remixer le tout dans le modèle, mais le but c’est d’avoir un seul champ dans lequel je tape directement le lien en code php, en gros pouvoir interpréter du code php venant d’un formulaire.

Recevoir par exemple le lien


$this->url = $_POST['url'];

Dans ce cas $this->url = ‘array(‘site/page’, ‘view’ => ‘contact’)’; Mais je voudrais que ça ait pour valeur $this->url = array(‘site/page’, ‘view’ => ‘contact’);

Et ensuite l’utiliser comme:


CHtml::link($model->titre,$model->url);

J’ai essayé de bidouiller avec eval() mais ça n’a pas été concluant.


(Luc Pfister) #4

utilises la fonction php substr pour virer tes ’


(Sebastienmonterisi) #5

Salut,

L’eval c’est la bonne solution puisqu’au debut tu as une chaine de charactères.

Ceci marche.




$url_str =  "array('site/page', 'view' => 'contact')";

$url_array =  $this->evaluateExpression($url_str);

echo CHtml::link('Mon lien', $url_array);



$this peut être n’importe quoi, au du moins n’importe quoi qui herite de CComponent (donc tout dans yii si je me trompe pas).

[size=“1”]un gist(c’est parceque je joue avec github). [/size]


(Duclik) #6

Merci! Je mets ça de côté pour quand j’en aurai besoin.