48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			48 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
namespace nur\config;
 | 
						|
 | 
						|
use nur\A;
 | 
						|
use nur\b\ValueException;
 | 
						|
use nur\yaml;
 | 
						|
 | 
						|
/**
 | 
						|
 * Class YamlConfig: une configuration stockée dans un fichier yaml
 | 
						|
 *
 | 
						|
 * Lors de la création de l'objet, il faut préciser le cas échéant dans quels
 | 
						|
 * profils sont valides cette configuration.
 | 
						|
 */
 | 
						|
class YamlConfig extends DynConfig {
 | 
						|
  /**
 | 
						|
   * @var array liste des profils dans lesquels cette configuration est valide.
 | 
						|
   *
 | 
						|
   * un tableau vide signifie que la configuration est valide dans tous les
 | 
						|
   * profils
 | 
						|
   */
 | 
						|
  protected $profiles;
 | 
						|
 | 
						|
  /** @var array */
 | 
						|
  protected $config;
 | 
						|
 | 
						|
  function __construct(string $input=null, string ...$profiles) {
 | 
						|
    $this->profiles = $profiles;
 | 
						|
    $this->config = yaml::load($input);
 | 
						|
  }
 | 
						|
 | 
						|
  function has(string $pkey, string $profile): bool {
 | 
						|
    if ($this->profiles && !in_array($profile, $this->profiles)) return false;
 | 
						|
    return A::phas_s($this->config, $pkey);
 | 
						|
  }
 | 
						|
 | 
						|
  function get(string $pkey, string $profile) {
 | 
						|
    if ($this->profiles && !in_array($profile, $this->profiles)) return null;
 | 
						|
    return A::pget_s($this->config, $pkey);
 | 
						|
  }
 | 
						|
 | 
						|
  function set(string $pkey, $value, string $profile): void {
 | 
						|
    if ($this->profiles && !in_array($profile, $this->profiles)) {
 | 
						|
      throw new ValueException("$profile: unauthorized profile");
 | 
						|
    }
 | 
						|
    A::pset_s($this->config, $pkey, $value);
 | 
						|
  }
 | 
						|
}
 |