/** * register presenter * * @return void */ private function registerPresenter() { $this->app->singleton('xe.presenter', function ($app) { $proxyClass = $app['xe.interception']->proxy(Presenter::class, 'Presenter'); /** @var \Xpressengine\Presenter\Presenter $presenter */ $presenter = new $proxyClass($app['view'], $app['request'], $app['xe.theme'], $app['xe.skin'], $app['xe.settings'], InstanceConfig::instance()); HtmlPresenter::setCommonHtmlWrapper(app('config')['xe.HtmlWrapper.common']); HtmlPresenter::setPopupHtmlWrapper(app('config')['xe.HtmlWrapper.popup']); /** @var \Xpressengine\Presenter\Presentable $htmlProxy */ $htmlProxy = $app['xe.interception']->proxy(HtmlPresenter::class, 'HtmlRenderer'); /** @var \Xpressengine\Presenter\Presentable $jsonProxy */ $jsonProxy = $app['xe.interception']->proxy(JsonPresenter::class, 'JsonRenderer'); $presenter->register($htmlProxy::format(), function (Presenter $presenter) use($htmlProxy) { return new $htmlProxy($presenter, app('xe.seo'), app('xe.widget.parser')); }); $presenter->register($jsonProxy::format(), function (Presenter $presenter) use($jsonProxy) { return new $jsonProxy($presenter); }); return $presenter; }); }
/** * Presenter Package 는 JsonRenderer, HtmlRenderer 를 지원한다. * Xpressengine 은 Register Container 로 등록된 Renderer 를 사용한다. * * @return RendererInterface */ protected function get() { $format = $this->request->format(); if (isset($this->presentables[$format]) === false) { throw new NotFoundFormatException(['name' => $format]); } if ($format == HtmlPresenter::format() && $this->api === true && $this->html === false) { $format = JsonPresenter::format(); } $presenter = $this->getPresenter($format); if (is_subclass_of($presenter, RendererInterface::class) === false && is_subclass_of($presenter, Presentable::class) === false) { throw new InvalidPresenterException(['name' => get_class($presenter)]); } return $presenter; }