PHP code example of ryunosuke / night-dragon

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

    

ryunosuke / night-dragon example snippets


<html lang="ja">
<head>
    <title><?= $title 

 $this->extend(__DIR__ . '/layout.phtml', [
    'title'    => 'PageTitle',
    'childvar' => 'ChildVar',
]) 

<html lang="ja">
<head>
    <title><?=\ryunosuke\NightDragon\Renderer::html($title)

 $this->extend(__DIR__ . '/layout.phtml', [
    'title'    => 'PageTitle',
    'childvar' => 'ChildVar',
]) 

$renderer = new \ryunosuke\NightDragon\Renderer([
    // デバッグ系
    'debug'              => $debug,
    'errorHandling'      => $debug,
    'gatherVariable'     => $debug ? self::DECLARED | self::FIXED | self::GLOBAL | self::ASSIGNED | self::USING : 0,
    'gatherModifier'     => $debug,
    'gatherAccessor'     => $debug,
    'constFilename'      => null,
    'typeMapping'        => [],
    'specialVariable'    => [],
    // インジェクション系
    'wrapperProtocol'    => Renderer::DEFAULT_PROTOCOL,
    'templateClass'      => Template::class,
    // ディレクトリ系
    'compileDir'         => null,
    // コンパイルオプション系
    'customTagHandler'   => [
        'strip' => Renderer::class . '::strip',
    ],
    'compatibleShortTag' => false,
    'defaultNamespace'   => '\\',
    'defaultClass'       => '',
    'defaultFilter'      => Renderer::class . '::html',
    'defaultGetter'      => Renderer::class . '::access',
    'defaultCloser'      => "\n",
    'nofilter'           => '@',
    'varModifier'        => ['|', '&'],
    'varReceiver'        => '$_',
    'varAccessor'        => '->',
    'varExpander'        => '`',
]);

$renderer->assign([
    // グローバルにアサインする変数
    'SiteName' => 'サイト名',
]);

echo $renderer->render(__DIR__ . '/action.phtml', [
    // テンプレートにアサインする変数
    'null'      => null,
    'float'     => 12345.6789,
    'string'    => "This's Title",
    'multiline' => "line1\nline2\nline3",
    'array'     => ['hoge' => 'HOGE', 'fuga' => ['x' => 'X', 'y' => 'Y', 'z' => 'Z']],
    'object'    => (object) ['hoge' => 'HOGE', 'fuga' => ['x' => 'X', 'y' => 'Y', 'z' => 'Z']],
    'closure'   => function ($arg) { return 'closure' . $arg; },
]);


# meta template data
// @formatter:off
// using variables:
/** @var \ryunosuke\NightDragon\Template $this */
/** @var mixed $_ */
/** @var null $null */
/** @var float $float */
/** @var string $string */
/** @var string $multiline */
/** @var array $array */
/** @var \stdClass $object */
/** @var \Closure $closure */
// using modifier functions:
if (false) {function strtoupper(...$args){define('strtoupper', \strtoupper(...[]));return \strtoupper(...$args);}}
if (false) {function str_replace(...$args){define('str_replace', \str_replace(...[]));return \str_replace(...$args);}}
if (false) {function number(...$args){define('number', \Modifier::number(...[]));return \Modifier::number(...$args);}}
if (false) {function is_null(...$args){define('is_null', \is_null(...[]));return \is_null(...$args);}}
if (false) {function var_export(...$args){define('var_export', \var_export(...[]));return \var_export(...$args);}}
if (false) {function implode(...$args){define('implode', \implode(...[]));return \implode(...$args);}}
if (false) {function strtolower(...$args){define('strtolower', \strtolower(...[]));return \strtolower(...$args);}}
// using array keys:
true or define('hoge', 'hoge');
true or define('fuga', 'fuga');
true or define('undefined', 'undefined');
true or define('undefined1', 'undefined1');
true or define('undefined2', 'undefined2');
// @formatter:on
html
<html lang="ja">
<head>
    <title>PageTitle - サイト名</title>
</head>
<body>
<section>
    <h2>親・子コンテンツの関係</h2>
    親テンプレートに渡した変数は使えません:not defined
    parent メソッドを使用して親コンテンツを表示します。
    これは子テンプレートから渡された変数です:ChildVar

    これは子供コンテンツです。
    色々変数を表示しています。
</section>

<section>
    <h2>オートエスケープ</h2>
    これはただの文字列表示です(デフォルトで html エスケープされます):this is This&#039;s Title
    ショート echo タグではなく、php タグはエスケープされません:this is This's Title    ただの php タグは改行もされません(php のデフォルトです。ショート echo タグを使うとその挙動を抑制できます)。
    これは自動エスケープの無効化です(@をつけると生出力になります):this is This's Title
</section>

<section>
    <h2>修飾子機能</h2>
    これは修飾子機能です("|" でパイプ演算子のような挙動になります):THIS&#039;S TITLE
    修飾子は繋げられるし、 $_ という特殊変数を使うと任意引数位置に適用できます:THIS&#039;S subject
    登録しておけば静的メソッドも呼べます:12,346
    引数付きです:12,345.679

    & は基本的に | と同じですが、値が null の場合にスルーされます(ぼっち演算子みたいなものです):default
    引数付きです:12,345.679

    | と & は混在可能です:true
</section>

<section>
    <h2>配列・オブジェクトアクセス</h2>
    これは配列のアクセスです("->" で配列アクセスできます):HOGE
    配列アクセスはネストできます:X
    "?->" で nullsafe アクセスができます:default
    オブジェクトもアクセスできます:HOGE
    配列とオブジェクトは混在して OK です:X
    埋め込み構文も使えます1:prefix-X-suffix
    埋め込み構文も使えます2:prefix-closurex-suffix
    このように ?? 演算子とも併用できます:default
    オブジェクトも可能できます。共にネストも出来ます:DEFAULT

    上記2つの機能は「配列アクセス -> 修飾子」のときのみ組み合わせ可能です:X,Y,Z
    右記のような順番の組み合わせはできません:<?= $string | str_split->z 
 # meta template data 
 echo $string 
` タグ)
    - `<?= @$string 
 # meta template data