Liaison
Build full GUI framework/cms-agnostic PHP applications. Many apps will require zero configuration and zero routing code. And build full websites.
Status: Unstable, Nearing stability, Docs are bad
Overview
A minimal project only needs a public
dir. If it's a website (instead of an App), you'll need a .htaccess
and a deliver.php
to run Liaison.
Some of these details will change as development continues, but the overall idea will remain consistent.
Sample Application
If this were truly a "blog" app, most of the public files would not be there, but I wanted to show the scope.
codeDir/
- config.json - Usually not needed
- class/ - General classes which get autoloaded
- BlogPost.php
- core/ - Liaison components
- Blog.php - Handles creating / editing of blog posts and sitemap generation.
- public/ -
- index.php - delivers at `/`
- about.md - delivers at `/about/` (requires CommonMark)
- image.png - delivers at `/image.png` (directories are cool, too)
- contact-us.php - `/contact-us/`, has a <form>
- @POST.contact-us.php - `/contact-us/` accepts the <form> submission
- blog/
- {slug}.php - `/blog/the-slug/` script to show your blog posts for the given slug
- view/
- blog.php - `echo $lia->view('blog');`
- blog.css - auto-included when 'blog' view is displayed
- blog.js - same as the .css
- blog/ - css & js files will also be included automatically
- extra.css
- extra.js
core/Blog.php
class Blog extends \Lia\Compo {
// You can have multiple sitemapWhateverName(){} functions
// static `public/` files will be auto-included in your sitemap
public function sitemapBlogPosts(){
//... Haven't figured out this feature yet
}
public function routePatternBlogSubmit(){
// More likely, your blog posts would use a function like this and submission would use a public file.
// so I'll update this later...
}
}
public/blog/{slug.php}
$blogPost = BlogPost::getPost($slug);
$lia->seoTitle($blogPost->title);
$lia->seoImage($blogPost->image);
echo $lia->view('blog',['post'=>$blogPost]);
view/blog.php
<h1><?=$post->title?></h1>
<div><?=$post->bodyAsHtml()?></div>
Executing Liaison on your site
$lia = new \Liaison();
$package = new \Lia\Package($lia, __DIR__.'/code/'); //or wherever your Liaison project is
$lia->deliver();