Commit 932c2b76 authored by nahakyuu's avatar nahakyuu

add Discuz template renderer demo & application view injection demo

parent 39c4717e
This diff is collapsed.
...@@ -7,6 +7,7 @@ use Yiisoft\Definitions\Reference; ...@@ -7,6 +7,7 @@ use Yiisoft\Definitions\Reference;
use Yiisoft\Middleware\Dispatcher\MiddlewareDispatcher; use Yiisoft\Middleware\Dispatcher\MiddlewareDispatcher;
use Yiisoft\Yii\Http\Handler\NotFoundHandler; use Yiisoft\Yii\Http\Handler\NotFoundHandler;
use Yiisoft\ErrorHandler\Middleware\ErrorCatcher;
use Yiisoft\Session\SessionMiddleware; use Yiisoft\Session\SessionMiddleware;
use Yiisoft\Csrf\CsrfMiddleware; use Yiisoft\Csrf\CsrfMiddleware;
use Yiisoft\Router\Middleware\Router; use Yiisoft\Router\Middleware\Router;
...@@ -18,6 +19,7 @@ return [ ...@@ -18,6 +19,7 @@ return [
'class' => MiddlewareDispatcher::class, 'class' => MiddlewareDispatcher::class,
'withMiddlewares()' => [ 'withMiddlewares()' => [
[ [
ErrorCatcher::class,
SessionMiddleware::class, SessionMiddleware::class,
CsrfMiddleware::class, CsrfMiddleware::class,
Router::class, Router::class,
......
<?php <?php
declare(strict_types=1);
use Yiisoft\Router\Group; use Yiisoft\Router\Group;
use Yiisoft\Router\RouteCollection; use Yiisoft\Router\RouteCollection;
use Yiisoft\Router\RouteCollectionInterface; use Yiisoft\Router\RouteCollectionInterface;
......
<?php
declare(strict_types=1);
use Yiisoft\Definitions\DynamicReference;
use Yiisoft\Definitions\Reference;
use Yiisoft\Aliases\Aliases;
use Yiisoft\View\WebView;
use NMForce\PHPDTS\View\DiscuzTemplateRenderer;
/** @var array $params */
return [
WebView::class => [
'__construct()' => [
'basePath' => DynamicReference::to(
static fn (Aliases $aliases) => $aliases->get($params['yiisoft/view']['basePath'])
),
],
'withDefaultExtension()' => [
'htm',
],
'withRenderers()' => [['htm' => Reference::to(DiscuzTemplateRenderer::class)]],
'setParameters()' => [
$params['yiisoft/view']['parameters'],
],
'reset' => function () use ($params) {
/** @var WebView $this */
$this->clear();
$this->setParameters($params['yiisoft/view']['parameters']);
},
],
];
...@@ -4,6 +4,8 @@ declare(strict_types=1); ...@@ -4,6 +4,8 @@ declare(strict_types=1);
use Yiisoft\Definitions\Reference; use Yiisoft\Definitions\Reference;
use NMForce\PHPDTS\ViewInjection\ApplicationViewInjection;
return [ return [
'yiisoft/aliases' => [ 'yiisoft/aliases' => [
'aliases' => [ 'aliases' => [
...@@ -13,4 +15,10 @@ return [ ...@@ -13,4 +15,10 @@ return [
'@views' => '@root/templates/default', '@views' => '@root/templates/default',
], ],
], ],
'yiisoft/yii-view' => [
'layout' => null,
'injections' => [
Reference::to(ApplicationViewInjection::class),
],
],
]; ];
<?php
declare(strict_types=1);
namespace NMForce\PHPDTS\View;
use Throwable;
use function extract;
use function func_get_arg;
use function ob_end_clean;
use function ob_get_clean;
use function ob_get_level;
use function ob_implicit_flush;
use function ob_start;
use Yiisoft\Aliases\Aliases;
use Yiisoft\View\ViewInterface;
use Yiisoft\View\TemplateRendererInterface;
final class DiscuzTemplateRenderer implements TemplateRendererInterface
{
public function __construct(private Aliases $aliases)
{
}
public function render(ViewInterface $view, string $template, array $parameters): string
{
defined('IN_GAME') or define('IN_GAME', TRUE);
defined('GAME_ROOT') or define('GAME_ROOT', "{$this->aliases->get('@root')}/");
defined('TPLDIR') or define('TPLDIR', './templates/default');
defined('TEMPLATEID') or define('TEMPLATEID', 1);
defined('CURSCRIPT') or define('CURSCRIPT', 'index');
$tplrefresh = 1;
require_once GAME_ROOT . './include/global.func.php';
$renderer = function (): void {
extract(func_get_arg(1), EXTR_OVERWRITE);
require template(basename(func_get_arg(0), '.htm'));
};
$obInitialLevel = ob_get_level();
ob_start();
ob_implicit_flush(false);
try {
$renderer->bindTo($view)($template, $parameters);
return ob_get_clean();
} catch (Throwable $e) {
while (ob_get_level() > $obInitialLevel) {
ob_end_clean();
}
throw $e;
}
}
}
<?php
declare(strict_types=1);
namespace NMForce\PHPDTS\ViewInjection;
use Yiisoft\Yii\View\CommonParametersInjectionInterface;
use Yiisoft\Aliases\Aliases;
final class ApplicationViewInjection implements CommonParametersInjectionInterface
{
public function __construct(
private Aliases $aliases
) {
}
public function getCommonParameters(): array
{
defined('IN_GAME') or define('IN_GAME', TRUE);
defined('GAME_ROOT') or define('GAME_ROOT', "{$this->aliases->get('@root')}/");
require GAME_ROOT . './include/global.func.php';
$vars = get_defined_vars();
require GAME_ROOT . './config.inc.php';
require GAME_ROOT . './gamedata/system.php';
require GAME_ROOT . './gamedata/gameinfo.php';
require GAME_ROOT . './gamedata/combatinfo.php';
$adminmsg = file_get_contents(GAME_ROOT . './gamedata/adminmsg.htm');
$systemmsg = file_get_contents(GAME_ROOT . './gamedata/systemmsg.htm');
$cuser = '苹果';
$error = '';
require config('resources');
require config('gamecfg');
$vars = array_diff(get_defined_vars(), $vars);
return $vars;
// return [
// // 'charset' => $this->charset,
// // 'allowcsscache' => 1,
// // 'homepage' => 'http://www.amarilloviridian.com/',
// // 'gameversion'=> 'GE942 ~TORONTO',
// ];
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment