-
-
Notifications
You must be signed in to change notification settings - Fork 112
Description
Would it be possible to set the $baseDir property of the FileLoader class to protected instead of private? (see FileLoader.php@L23)
I'm trying to implement a custom file loader that allows prepending an alias to the root directory when including (e.g. {include '~partials/image.latte'} would render /path/to/views/dir/partials/image.latte).
The only change needed is in the getReferredName method, so I'd like to extend the base class and avoid re-implementing the whole thing. However, from my child class, I can't access the base dir property since it's private. See code below.
Let me know if there's a simpler method to accomplish this or any good reason to keep it as private.
Ideally, this would be part of the framework, but I'm okay with creating a custom loader for that and understand it might not make sense for every app.
Thanks.
BTW. If relevant, I'm not using Nette framework, this is on top of a third-party CMS.
This is what the custom loader would look like:
<?php namespace App;
use Latte\Loaders\FileLoader;
/**
* Custom template file loader.
*
* Modified to allow including files from basedir directly by prepending ~ or /
* Example:
* /partials/image.latte >> /path/to/view/dir/partials/image.latte
* ~partials/image.latte >> /path/to/view/dir/partials/image.latte
*/
class CustomFileLoader extends FileLoader
{
/**
* Aliases that refer to the base dir when prepended to a filename
*
* @var array
*/
static protected $baseDirAliases = [
'/',
'~',
];
/**
* Returns referred template name.
*
* Check for prepended alias to baseDir and return path from there if found
* Otherwise, refer to default implementation
*
*/
public function getReferredName($file, $referringFile): string
{
if (
$this->baseDir &&
in_array(substr($file, 0, 1), static::$baseDirAliases)
) {
return $this->normalizePath(substr($file, 1));
}
return parent::getReferredName($file, $referringFile);
}
}