Jump to content
Sign in to follow this  
Sgt Fatality

Class - kConfigEditor : Un Editeur de Configuration pour kowFramework

Recommended Posts

Niveau requis Intermédiaire

Temps estimé : 30 minutes

Bonjour à tous,

 

De plus en plus l'idée de créer un CMS basé sur mon framework kowFramework devient réalité. Que ce soit pour l'émulation Dofus, Metin2 ou en général j'ai envie de travailler sur un CMS générique facile d'utilisation. kowFramework a été conçu dans l'optique d'être une base de développement simple et légère. Mais également de pouvoir devenir un outil puissant grâce aux nombreuses librairies, plugins et modules qui seront développé par la suite (que ce soit par la communauté ou par moi-même). Je vous présente donc une des premières librairies qui permet l'édition des fichiers de configuration (actuellement ajout et modification des paramètres d'un fichier de configuration).

 

GitHub : ICI

 

KCONFIGEDITOR.PHP

 

Révélation
<?php
/**
 * New BSD License
 *
 * Copyright (C) 2013 Kevin Ryser (http://framework.koweb.ch) All rights reserved
 * See the LICENSE file for the full license text.
 */
Class ConfigEditor
{
	private $_file_path = '';
	private $_file_data = '';
	private $_array_depth = 0;
	public function __construct($file_path)
	{
		$this->_file_path = $file_path;
	}
	public function open()
	{
		if (is_file($this->_file_path))
			$this->_file_data = file_get_contents($this->_file_path);
		if ($this->_file_data)
			return true;
		return false;
	}
	public function to_text_array($value)
	{
		$arr = '';
		++$this->_array_depth;
		foreach ($value as $k => $v)
		{
			if (empty($arr))
				$arr .= "array(\r\n";
			for ($i = 0; $i < $this->_array_depth; ++$i)
				$arr .= '	';
			if (is_array($v))
				$arr .= ((is_string($k)) ? '\'' . $k . '\'' : $k) . ' => ' . $this->to_text_array($v);
			else
			{
				// Not very clean but constant function throw an excepetion if the constant doesn't exist...
				if (DEBUG_MODE)
					error_reporting(0);
				if (is_string($k))
				{
					$arr .= ((!constant($k)) ? '\'' . $k . '\'' : $k) . ' => ';
					$arr .= ((is_string($v) and !constant($v)) ? '\'' . $v . '\'' : $v) . ",\r\n";
				}
				else
					$arr .= ((is_string($v) and !constant($v)) ? '\'' . $v . '\'' : $v) . ",\r\n";
				// Enable debug mode again
				if (DEBUG_MODE)
					error_reporting(E_ALL | E_STRICT);
			}
		}
		--$this->_array_depth;
		for ($i = 0; $i < $this->_array_depth; ++$i)
			$arr .= '	';
		$value = $arr . ')';
		if ($this->_array_depth != 0)
			$value .= "\r\n";
		return $value;
	}
	public function set($key, $value, $comment = null)
	{
		if (is_array($value))
			$value = $this->to_text_array($value);
		elseif (is_bool($value))
			$value = ($value) ? 'true' : 'false';
		elseif (is_float($value))
			$value = floatval($value);
		elseif (is_int($value))
			$value = intval($value);
		elseif (empty($value))
			$value = 'false';
		else
			$value = '\'' . addslashes($value) . '\'';
		if (preg_match('/\$config\[["\']' . $key . '["\']\](.*);/msU', $this->_file_data))
			$this->_file_data = preg_replace('/\$config\[["\']' . $key . '["\']\](.*);/msU', "\$config['" . $key . "'] = " . $value . ";", $this->_file_data);
		else
			$this->_file_data .= PHP_EOL . '$config[\'' .  $key . '\'] = ' . $value . ';';
		$this->_array_depth = 0;
	}
	public function save()
	{
		return file_put_contents($this->_file_path, $this->_file_data, LOCK_EX) !== false;
	}
}
?>

 

 

TUTORIEL

 

Révélation

Une librairie pour l'édition des fichiers de configuration pour le framework PHP kowFramework. Placer la librairie dans le dossier "librairies" de kowFramework. Charger la librairie dans le contrôleur, passer en paramètre le chemin vers le fichier et ouvrir le fichier :

<?php
	$configEditor = $this->load()->library('kConfigEditor/ConfigEditor', 'test.php');
	if (!$configEditor->open()){
		echo 'Erreur lors de l\'ouverture du fichier de configuration. Si vous décidez de sauvegarder le fichier celui-ci sera créé.';
	}
?>

Modifier et / ou ajouter des paramètres du fichier de configurations :

<?php
	// Si le paramètre existe, il est modifié.
	$configEditor->set('default_controller', 'page');
	// S'il n'existe pas, il est ajouté à la fin du fichier.
	$configEditor->set('plugins', array('MyPlugins1', 'MyPlugins2'));
?>

Sauvegarder les changements dans le fichier :

<?php
	// Si le fichier n'existe pas, il est créé automatiquement.
	$configEditor->save();
?>

Résultat : fichier test.php :

<?php
	// Avant
	$config['default_controller'] = 'news';
	
	// Après
	$config['default_controller'] = 'page';

	$config['plugins'] = array('MyPlugins1', 'MyPlugins2');
?>

Les constantes sont supportées mais il faut les déclarer en tant que chaîne de caractères (string) :

<?php
	// Exemple
	$configEditor->set('database', array(
		'PDO::MYSQL_ATTR_INIT_COMMAND' => 'SET NAMES utf8',
		'PDO::ATTR_ERRMODE',
		'PDO::ERRMODE_WARNING',
	));
	
	// Résultat dans le fichier de configuration
	$config['database'] = array(
		PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
		PDO::ATTR_ERRMODE,
		PDO::ERRMODE_WARNING,
	);
?>

Cas concret, édition / ajout de la configuration d'une base de données :

<?php
	// A noter les constantes PDO définie comme chaîne de caractères (string).
	$configEditor->set('database', array(
		'kowcms' => array(
			'host' 		=> 'localhost',
			'port'		=> 3306,
			'username'	=> 'root',
			'password'	=> '',
			'options'	=> array(
				'PDO::MYSQL_ATTR_INIT_COMMAND' => 'SET NAMES utf8',
				'PDO::ATTR_ERRMODE', 'PDO::ERRMODE_WARNING'
			)
		)
	));
	
	// Résultat dans le fichier de configuration
	$config['database'] = array(
		'kowcms' => array(
			'host' => 'localhost',
			'port' => 3306,
			'username' => 'root',
			'password' => '',
			'options' => array(
				PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
				PDO::ATTR_ERRMODE,
				PDO::ERRMODE_WARNING,
			)
		)
	);
?>

 

 

Bonne journée,

Sgt Fatality

Share this post


Link to post

Je vais améliorer la librairie très prochainement pour ajouter la lecture et l'écriture sur plusieurs lignes (plus lisible pour les tableaux par exemple) et je vais également voir pour ajouter le support des commentaires.

Share this post


Link to post

Bonjour,

 

J'ai mis à jour ce matin la librairie pour supporter les paramètres sur plusieurs lignes (tableau par exemple) et les tableaux sont maintenant écris sur plusieurs lignes dans le fichier de configuration pour une meilleure lisibilité. La librairie supporte maintenant les constantes (PDO par exemple), il faut juste définir la constante comme chaîne de caractères (string), à placer entre guillemet.

 

La documentation se trouve sur le dépôt Github.

 

Bonne journée,

Sgt Fatality

Share this post


Link to post

Yop !

Tout d'abords, superbe taf' de ta part :).

 

Ensuite j'ai remarqué une erreur dans ta doc :

$configEditor = $this->load()->library('kConfigEditor/ConfigEditor', 'test.php');
if (!$configEditor->open())
   echo 'Erreur lors de l'ouverture du fichier de configuration. Si vous décidez de sauvegarder le fichier celui-ci sera créé.';

 

L'apostrophe n'est pas échappé donc mal compilé (voir pas du tout :P).

 

Je vais voir tes avancements sur le kfw ;). J'essayerais peut-être de coder un de mes projets (aussi nombreux soit-ils) avec le kfw :P.

 

Cordialement,

ThanosS.

Share this post


Link to post

Pourquoi tu te fait chier à recoder une fonction déjà existante en php ?

var_export linéarise très bien les variables en php ;)

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  
  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...

Important Information

Terms of Use / Privacy Policy / Guidelines / We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.