Overview

Namespaces

  • Charcoal
    • Config

Classes

  • Charcoal\Config\AbstractConfig
  • Charcoal\Config\AbstractEntity
  • Charcoal\Config\GenericConfig

Interfaces

  • Charcoal\Config\ConfigInterface
  • Charcoal\Config\ConfigurableInterface
  • Charcoal\Config\DelegatesAwareInterface
  • Charcoal\Config\EntityInterface
  • Charcoal\Config\FileAwareInterface
  • Charcoal\Config\SeparatorAwareInterface

Traits

  • Charcoal\Config\ConfigurableTrait
  • Charcoal\Config\DelegatesAwareTrait
  • Charcoal\Config\FileAwareTrait
  • Charcoal\Config\SeparatorAwareTrait
  • Overview
  • Namespace
  • Class
 1: <?php
 2: 
 3: namespace Charcoal\Config;
 4: 
 5: use InvalidArgumentException;
 6: 
 7: /**
 8:  * Provides an object with a {@see ConfigInterface configuration container}.
 9:  *
10:  * This is a full implementation of {@see ConfigurableInterface}.
11:  */
12: trait ConfigurableTrait
13: {
14:     /**
15:      * The config object.
16:      *
17:      * @var ConfigInterface
18:      */
19:     private $config;
20: 
21:     /**
22:      * Sets the object's configuration container.
23:      *
24:      * @param  mixed $config The Config object, datamap, or filepath.
25:      * @throws InvalidArgumentException If the parameter is invalid.
26:      * @return self Chainable
27:      */
28:     public function setConfig($config)
29:     {
30:         if (is_string($config)) {
31:             // Treat the parameter as a filepath
32:             $this->config = $this->createConfig($config);
33:         } elseif (is_array($config)) {
34:             $this->config = $this->createConfig($config);
35:         } elseif ($config instanceof ConfigInterface) {
36:             $this->config = $config;
37:         } else {
38:             throw new InvalidArgumentException(sprintf(
39:                 'Configset must be an associative array, a file path, or an instance of %s',
40:                 ConfigInterface::class
41:             ));
42:         }
43: 
44:         return $this;
45:     }
46: 
47:     /**
48:      * Gets the object's configuration container or a specific key from the container.
49:      *
50:      * @param  string|null $key     If provided, the data key to retrieve.
51:      * @param  mixed       $default The fallback value to return if $key does not exist.
52:      * @return mixed If $key is NULL, the Config object is returned.
53:      *     If $key is given, its value on the Config object is returned.
54:      *     If the value of $key is NULL, the value of $default is returned.
55:      */
56:     public function config($key = null, $default = null)
57:     {
58:         if ($this->config === null) {
59:             $this->config = $this->createConfig();
60:         }
61: 
62:         if ($key !== null) {
63:             if ($this->config->has($key)) {
64:                 return $this->config->get($key);
65:             } elseif (!is_string($default) && is_callable($default)) {
66:                 return $default();
67:             } else {
68:                 return $default;
69:             }
70:         }
71: 
72:         return $this->config;
73:     }
74: 
75:     /**
76:      * Create a new ConfigInterface instance for the object.
77:      *
78:      * @see    AbstractConfig
79:      * @param  mixed $data Initial data. Either a filepath, a datamap, or a Config object.
80:      * @return ConfigInterface A new Config object.
81:      */
82:     protected function createConfig($data = null)
83:     {
84:         return new GenericConfig($data);
85:     }
86: }
87: 
API documentation generated by ApiGen