1. Go to this page and download the library: Download xp-forge/frontend library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
xp-forge / frontend example snippets
use web\frontend\{Handler, Get, Param};
#[Handler]
class Hello {
#[Get]
public function greet(#[Param('name')] $param) {
return ['name' => $param ?: 'World'];
}
}
use web\Application;
use web\frontend\{AssetsFrom, Frontend, Handlebars};
class Site extends Application {
/** @return [:var] */
public function routes() {
$assets= new AssetsFrom($this->environment->path('src/main/webapp'));
$templates= new Handlebars($this->environment->path('src/main/handlebars'));
return [
'/favicon.ico' => $assets,
'/static' => $assets,
'/' => new Frontend(new Hello(), $templates)
];
}
}
use web\frontend\{Frontend, HandlersIn};
// ...inside the routes() method, as seen above:
new Frontend(new HandlersIn('org.example.web'), $templates);
use web\frontend\{Handler, Get};
#[Handler('/hello')]
class Hello {
#[Get]
public function world() {
return ['greet' => 'World'];
}
#[Get('/{name}')]
public function person(string $name) {
return ['greet' => $name];
}
}
use web\Headers;
use web\frontend\View;
// Equivalent of the above world() method's return value
return View::named('hello')->with(['greet' => 'World']);
// Redirecting to either paths or absolute URIs
return View::redirect('/hello/World');
// Add headers and caching, here: for 7 days
return View::named('blog')
->with($article)
->header('Last-Modified', Headers::date($modified))
->cache('max-age=604800, must-revalidate')
;
use web\frontend\AssetsFrom;
// Single source
$assets= new AssetsFrom($this->environment->path('src/main/webapp'));
// Multiple sources
$assets= new AssetsFrom([
$this->environment->path('src/main/webapp'),
$this->environment->path('vendor/example/layout-lib/src/main/webapp'),
]);
use web\frontend\AssetsFrom;
$assets= (new AssetsFrom($path))->with([
'Cache-Control' => 'max-age=2419200, must-revalidate'
]);
use web\frontend\{AssetsFrom, AssetsManifest};
$manifest= new AssetsManifest($path->resolve('manifest.json'));
$assets= new AssetsFrom($path)->with(fn($uri) => [
'Cache-Control' => $manifest->immutable($uri) ?? 'max-age=2419200, must-revalidate'
]);
use web\frontend\Handlebars;
use web\frontend\helpers\Assets;
$templates= new Handlebars($path, [new Assets($manifest)]);
use web\frontend\{HandlersIn, Frontend, Exceptions};
use org\example\{InvalidOrder, LinkExpired};
use lang\Throwable;
$frontend= (new Frontend(new HandlersIn('org.example.web'), $templates))
->handling((new Exceptions())
->catch(InvalidOrder::class, fn($e) => View::error(503, 'invalid-order')),
->catch(LinkExpired::class, 404) // uses template "errors/404"
->catch(Throwable::class) // catch-all, errors/{status} for web.Error, errors/500 for others
)
;