PHP code example of decodelabs / greenleaf

1. Go to this page and download the library: Download decodelabs/greenleaf 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/ */

    

decodelabs / greenleaf example snippets


use DecodeLabs\Harvest;
use DecodeLabs\Monarch;

$greenleaf = Monarch::getService(Greenleaf::class);
$harvest = Monarch::getService(Harvest::class);

$dispatcher = $greenleaf->createDispatcher();
$request = $harvest->createRequestFromEnvironment();
$response = $dispatcher->handle($request);

use DecodeLabs\Archetype;
use MyApp\Http;

$archetype = Monarch::getService(Archetype::class);
$archetype->alias('DecodeLabs\\Greenleaf\\*', Http::class);

namespace MyApp\Http;

use DecodeLabs\Greenleaf\Generator;
use DecodeLabs\Greenleaf\Route\Action;
use DecodeLabs\Greenleaf\Route\Parameter;
use DecodeLabs\Greenleaf\Route\Redirect;

class Routes implements Generator
{
    public function generateRoutes(): iterable
    {
        // Basic route
        yield new Action('/', 'home');

        // Basic route with parameter
        yield new Action('test/{slug}', 'test')

        // Route with inset parameters
        yield new Action('test-{slug}/', 'test?hello', parameters: [
            new Parameter\Slug('name')
        ])

        // Route with multi-part path parameters
        yield new Action('assets/{path}', 'assets', parameters: [
            new Parameter\Path('path')
        ]);

        // Redirect
        yield new Redirect('old/path', 'new/path');
    }
}

// Route
new Action('test/{slug}', 'test?hello');

// Creates URL
$greenleaf->url('leaf:/test?hello');
// $parameters = ['slug' => 'value-of-slug-in-request']

// Resolves to:
$actionClass = MyApp\Http\Test::class;

// --------------------------
// Or
new Action('blog/articles', 'blog/articles');

// Creates URL
$greenleaf->url('leaf:/blog/articles');

// Resolves to:
$actionClass = MyApp\Http\Blog\Articles::class;

namespace MyApp\Http;

use DecodeLabs\Harvest\Response\Text as TextResponse;
use DecodeLabs\Greenleaf\Action;
use DecodeLabs\Greenleaf\Action\ByMethodTrait;

class Test implements Action
{
    use ByMethodTrait;

    public function get(
        string $slug
    ): TextResponse {
        return new TextResponse('Get response');
    }

    public function post(
        string $slug
    ): TextResponse {
        return new TextResponse('Post response');
    }
}

...

use DecodeLabs\Greenfleaf\Route\Page;

// HTML file /src/components/pages/about.html
yield new Page('about', 'about.html');

// Horizon Page /src/components/pages/blog.php
yield new Page('blog', 'blog.php');

// route pattern: test/{slug}

$url = $greenleaf->url(
    'test?hello#fragment',
    ['slug' => 'my-slug']
);

// https://mydomain.localtest.me/test/my-slug?hello#fragment