Server.php

<?php

namespace Lia\Package;

/**
 *
 * @test loading of config.json
 */
#[\AllowDynamicProperties]
class Server extends \Lia\Package {

    public string $fqn = 'lia:server';

    public string $name = 'server';

    /** key=>value params to automatically `extract()` into public files. Each package has it's own list of params to extract, so params from one package will not be shared with public files in other packages. */
    public array $public_file_params = [];

    /**
     *
     */
    public ?string $base_url = null;

    /**
     * @param $path the url path within the package
     * @return url with the base_url prepended
     */
    public function url(string $path){
        return str_replace(
            '//', '/',
            $this->base_url.$path
        );
    }

    public function __construct(\Lia $lia, string $name='lia:server', ?string $dir=null, ?string $base_url=null){
        $this->base_url = $base_url;
        if ($dir==null)$dir = dirname(__DIR__);
        parent::__construct($lia, $name, $dir);
    }

    public function onConfigured(array $configs){

        // set params from configs
        $this->base_url = $this->base_url ?? $this->config('base_url') ?? '';
        if ( ($fqn = $this->config('fqn')) != null){
            $this->fqn = $fqn;
        }
        if ( ($pfp = $this->config('public_file_params')) != null){
            $this->public_file_params = array_merge_recursive($this->public_file_params, $pfp);
        }

        if (!is_null($this->base_url)){
            $this->base_url = $this->base_url;
        }
    }

    /**
     * Return the built-in package
     */
    static public function main(\Lia $lia): static {
        return new static($lia, 'lia:server', dirname(__DIR__));
    }
    static public function main_dir(){
        return dirname(__DIR__);
    }

    public function goto($url){
        $url = $this->url($url);
        //$url = $this->base_url.'/'.$url;
        //$url = str_replace(['///','//'], '/', $url);
        \Lia\Addon\Redirect::from($this->lia)->goto($url);
        // $this->lia->dump();
    }

}