> For the complete documentation index, see [llms.txt](https://simcycreative.gitbook.io/signer/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://simcycreative.gitbook.io/signer/php-functions/configuration.md).

# Configuration

Accessing the application's configuration and environment variables

From time to time, one needs to access variables set in the environment or configuration files. We will explain how this is done in Simcify here.

**Environment Variables**

At the root of Simcify's directory structure, there is a file named **`.env.example`**. This file describes all environment variables that should are for Simcify to work correctly. A copy of this file should be made in the same location and named `.env`. The ***.env***  file should be edited and correct values set for each required variable. Custom variables you may require in your application can also be defined here.

To retrieve environment variables, Simcify provides a helper function **`env`**. Usage is described below:

`mixed`` `**`env(`**` ``string`` `**`$variable_name`**` ``[, mixed`` `**`$default_value = null`**` ``]`**`)`**

| Parameter        | Type     | Required | Default | Description                                               |
| ---------------- | -------- | -------- | ------- | --------------------------------------------------------- |
| `$variable_name` | `string` | Yes      | none    | The name of the environment variable to retrieve          |
| `$default_value` | `mixed`  | No       | `null`  | The value to return if the variable is not found/declared |

Returns `mixed` - The value of the variable requested or the default value otherwise.

> `env()` will convert string values like shown below:
>
> * **'true'** or **'(true)'** will be converted to PHP's boolean `true`.
> * **'false'** or **'(false)'** will be converted to PHP's boolean `false`.
> * **'empty'** or **'(empty)'** will be converted to an empty string `''`.
> * **'null'** or **'(null)'** will be converted to `void`/`undefined`.
> * values enclosed in double quotes will have their quotes stripped e.g. **"I have spaces"** will be stripped to `I have spaces`.

**Configuration Files**

At the root of Simcify's directory structure there is a directory named **`config`**. This folder stores config values categorised by file name e.g. All authentication configuration variables will be stored in *auth.php*.

Configurations stored in this files may also be extracted  from the environment variables and it is recommended that all environment variables have a corresponding config variable. This is because unlike environment variables which are declared only once and are not mutable, config variables are mutable and can be changed during the run-time of a request.

To retrieve config variables or set them during run-time, Simcify provides the helper function  `config` which acts as a getter/setter polymorphic function. Usage is described below:

`mixed`` `**`config(`**` ``string`**`$key`**` ``[, mixed`` `**`$value = null`**` ``]`**`)`**

| Parameter | Type     | Required | Default | Description                                                                                                                                                     |
| --------- | -------- | -------- | ------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `$key`    | `string` | Yes      | none    | The key of the configuration variable to get in dot syntax i.e. ***database.driver*** which will access the value *'driver'*  from the **'database.php'** file. |
| `$value`  | `mixed`  | No       | `null`  | The value to set on the config variable during run-time.                                                                                                        |

Returns `mixed` - Returns the value of the config variable whose $*key* is provided when $*value* is null or not provided or sets the config variable to the value provided otherwise.

As you can see here, config will act as a getter when used with one parameter and as a setter method when two parameters are passed.
