<?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 = [];
/**
* Setting this directly does not work, bc routes are setup during the constructor.
*
* Instead do `$lia->set('package_name.base_url', '/base_url/');`
*/
public $base_url = '';
/**
* @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, $name='lia:server', $dir=null, $base_url=null){
if ($dir==null)$dir = dirname(__DIR__);
parent::__construct($lia, $name, $dir);
}
public function onConfigured(array $configs){
// set params from configs
$this->base_url = $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;
}
}
static public function main($lia){
return new static($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();
}
}