The default directory structure of hiraeth/app
looks like the following:
Directory | Description |
---|---|
bin | Contains PHP scripts designed to be executed via CLI, e.g. php bin/server |
config | Contains all Hiraeth configuration information |
local | Contains end-user PHP source code: classes, interfaces, traits, etc |
public | Contains web-accessible files/directories (the “document root” for your server) |
resources | Contains end-user templates and layouts, suggested path also for css/js source |
storage | Contains application writable files and folders (user uploads, logs, cache) |
vendor | Contains vendor PHP source code: classes, interface, traits, etc |
The parent directory of these is referred to as the “application root.”
Checking for a File or Directory
You can check if a file exists using the hasFile()
method. For example, to see if there is a .env
file in the application root, you can do:
$app->hasFile('.env')
Similarly, you can check for directories using hasDirectory()
. See if a cache directory exists:
$app->hasDirectory('storage/cache')
File and directory names beginning with a /
or <scheme>://
are considered absolute. If the path does not begin with one of these, it will be treated as relative to the application root.
Getting File or Directory Information
To get an SplFileInfo
object for a file or directory use the getFile()
and getDirectory()
methods with the application root relative path:
$app->getFile('composer.json')
You can then use the SplFileInfo
object to get more information about the file or directory. For example, to get the real absolute path to the public storage directory:
$app->getDirectory('storage/public')->getRealPath()
Creating a File or Directory
In many cases you may want to create a file or directory if it does not exist. This is frequently the case, for example, if you’re using getDirectory()
to get sub-directories for storing various assets. Adding, TRUE
as the second argument to either getFile()
or getDirectory()
will attempt to create the file or directory if it does not exist.
$app->getFile('storage/sync.lock', TRUE)
When files are created, they will be created using the UMASK
set in the .env
file. By default, this value is 0002
which means owner and group will be able to write (this allows ACLs to limit permissions on group). You can change this value to modify the umask for all application created files and directories.
UMASK = 0022
In addition to basic file access via Hiraeth\Application
, you can install hiraeth\volumes
to provide access to external storage interfaces like S3, SFTP, and additional local volumes.