Aller au contenu


Photo

CodeIgniter Configs


  • Please log in to reply
2 replies to this topic

#1 FredoMkb

FredoMkb

    ...bosseigne...

  • Membres
  • PipPipPipPipPipPipPip
  • 2 645 Messages :
  • Configuration:iMac-SowLeopard
  • Sexe:Masculin
  • Localisation:StÉ
  • Passions:À part rien, absolument tout le reste !

Posté 31 décembre 2013 - 11:52

Bonjour à tous :)

En cette journée spéciale, veille d'une nouvelle année, que je souhaite prometteuse à tous, je tapote un peu de Php sur mon clavier, sur mon premier projet CI (qui commence à avoir une longue histoire parsemée d'embuches, mais toujours aussi inachevée qu'à la première ligne de code... c'est dire si je tourne encore en bourrique :( )

Quoi qu'il en soit, aujourd'hui, malgré mes recherches sur le net, je butte lamentablement sur une question qui, à première vue, aurait dû être banale à traiter pour un framework comme CI... hélas, ça semble bien plus compliqué que ça :

Comment sauvegarder, de manière dynamique et permanente, les valeurs changées dans un fichier de configuration projet ? :huh:

On peut donc récupérer n'importe quelle config tout simplement avec :

$this->config->item('item name');

On peut également modifier la valeur d'une config avec :

$this->config->set_item('item_name', 'item_value');

Malheureusement, cette valeur modifiée n'est pas mémorisée de manière permanente automatiquement, ce qui aurait été la moindre des choses pour une config... non ? :blink:

Certains préconisent et proposent même des codes pour mémoriser ces valeurs de configuration directement dans la base de données... mais, franchement, ce n'est pas une idée qui me séduit vraiment...

Alors, avant de tout coder en "Php old style" pour la sauvegarde des configs (bonjour le progrès :lol: ), je me tourne vers vous pour savoir si quelqu'un (Amarok, Help !) aurait une brillante idée ou technique pas trop chiante à faire (et oui, on utilise un framework pour se faciliter la vie, que diable !).

Ok, en attendant vos lumières, je vous souhaite à tous un excellent réveillon, plein de folie mais avec modération les gars..

;)

Ce message a été modifié par FredoMkb - 31 décembre 2013 - 11:54 .

Fredo
"Un pas à la fois me suffit..." Gandhi
"Il n'y a rien de plus inutile que quelque chose d'inexistant. Il n'y a rien de plus utile que de tenter de le créer." FredoMkb

#2 Amarok II

Amarok II

    NeoAdmin

  • Administrateurs
  • PipPipPipPipPipPip
  • 1 469 Messages :
  • Configuration:Un petit truc en alu avec un grand rectangle lumineux qui affiche des choses qui bougent quand je chatouille un autre truc en alu, là... tout plat.
  • Sexe:Mystère
  • Localisation:Perpignan, France
  • Passions:MacFr bien sûr !

Posté 31 décembre 2013 - 13:26

Salut fredo et merci pour tes recommandations pour le réveillon :P on va tacher de s'y employer ;)
Pour ma part, je stocke en effet tous mes paramètres dans une table sous forme de clé->valeur, cela marche super bien, avec un petit formulaire dans mon espace admin afin de changer les valeurs via une page web.
Ensuite, mettre en place un fichier genre www.monsiteweb.plist (dans l'idée), et récupérer/actualiser ses données via php, ben là, c'est méthode old school, mais pas vraiment sorcier à faire avec CI (file helper).

Le truc est d'avoir une idée précise de l'approche à avoir (ftp upload, ou web admin).

Avec une approche HMVC, tu pourrais te faire un petit module qui ne gèrerait que cela... enfin, ce que j'en dit :)

Mais on peut voir plus loin et imaginer tout un site tournant avec CI mais SANS base SQL derrière, avec tout de même une interface d'admin et uniquement de la lecture/ecriture dans des fichiers textes...

En y réfléchissant, je pense qu'il est possible d'ajouter un fichier .php à ta config mais je ne sais pas trop (avec une forte probabilité sur "non") si l'on peut modifier dynamiquement un fichier de conf...

Tiens-nous au courant !

MacBook Pro (13", fin 2012)
8Go RAM - 256Go SSD - 1To HD

Technicien certifié ACMT et plein d'autres trucs...

"On peut voir de bien des façons. On peut être aveugle de bien des façons." (Frank Herbert, Dune)

"Tu ne feras point de machine à l'esprit de l'homme semblable." (Frank Herbert, Dune)


#3 FredoMkb

FredoMkb

    ...bosseigne...

  • Membres
  • PipPipPipPipPipPipPip
  • 2 645 Messages :
  • Configuration:iMac-SowLeopard
  • Sexe:Masculin
  • Localisation:StÉ
  • Passions:À part rien, absolument tout le reste !

Posté 31 décembre 2013 - 16:52

Salut Amarok et merci pour ta réponse :)

Ok, la solution d'enregistrement des configs dans la base ne me séduisait pas trop, j'aime bien pouvoir modifier manuellement un paramètre directement par Ftp lorsque cela s'avère nécessaire, avec une base de données ce serait un peu plus compliqué à faire parfois...

Bon, j'ai fini par trouver une solution, consistant à faire un mixte de CI et de Php "classique", le tout en gardant la souplesse de CI bien-sûr :

- J'ai donc créé un fichier "MY_Config.php" dans le dossier "projet/application/core/" pour étendre la class "Config" du système ;

- J'y ai juste ajouté une fonction "save" avec récupération des données du fichier config à sauvegarder ;

- J'ai recomposé un nouveau contenu Php (balises, sécurité et commentaires) et converti les données avec la fonction "var_export" ;

- Enfin, j'ai utilisé les fonctions natives à CI (helper "file") pour enregistrer ces nouveaux contenus dans le même fichier config.

Du coup, à l'utilisation, ça donne quelque chose comme ceci :

// récupération d'une config
$maConfig = $this->config->item('maConfig');

// modification de la config
$maNouvelleConfig = $maConfig + $uneAutreValeur;

// remplacement de l'ancienne valeur par la nouvelle
$this->config->set_item('maConfig', $maNouvelleConfig);

// sauvegarde de la nouvelle config
$this->config->save('nomDuFichierConfig');

Bon, ça a l'air de bien fonctionner, il faut maintenant que je fabrique les formulaires pour pouvoir personnaliser ces paramètres... :huh: ... je crois que ce sera pour l'année prochaine... je sature un peu là :blink:

Enfin, pour les curieux, voici ce que donne le code Php de cette extension de classe CI :

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* Extends Config Class
* Pour sauvegarder les modifications des configs du projet
*/
class MY_Config extends CI_Config {
/**
* Save Config File
*
* @access public
* @param string the config file name
*/
function save($file = '', $found = FALSE)
{
$file = ($file == '') ? 'config' : str_replace('.php', '', $file);
$check_locations = defined('ENVIRONMENT') ? array(ENVIRONMENT.'/'.$file, $file) : array($file);
foreach ($this->_config_paths as $path)
{
foreach ($check_locations as $location)
{
$file_path = $path.'config/'.$location.'.php';
if ( $found = (bool) file_exists($file_path) ) break;
}
if ( $found === FALSE ) continue;
include($file_path);
if ( ! isset($config) OR ! is_array($config)) return FALSE;

$aConfig = array_intersect_key($this->config, $config);

$data = '<'.'?'.'php if (!defined(\'BASEPATH\')) exit(\'No direct script access allowed\');'.PHP_EOL.PHP_EOL;
$data .= '$'.'config = '.var_export($aConfig, TRUE).';'.PHP_EOL.PHP_EOL;
$data .= '/'.'* End of file '.$file.'.php *'.'/'.PHP_EOL;

write_file($file_path, $data);
log_message('debug', 'Config file saved: '.$file_path);

break;
}
return TRUE;
}
}
// END MY_Config class
/* End of file MY_Config.php */
/* Location: ./application/core/MY_Config.php */

Bon réveillon à tous ;)

Ce message a été modifié par FredoMkb - 31 décembre 2013 - 16:56 .

Fredo
"Un pas à la fois me suffit..." Gandhi
"Il n'y a rien de plus inutile que quelque chose d'inexistant. Il n'y a rien de plus utile que de tenter de le créer." FredoMkb




0 utilisateur(s) en train de lire ce sujet

0 membre(s), 0 invité(s), 0 utilisateur(s) anonyme(s)