[Pratical BEAR.Sunday] 리소스 단위로 렌더기를 변경하는 방법

5624 단어 BEAR.Sunday
개시하다
자원에는 표시를 위한 자원 회수소가 있다.
문자열이 평가되면 자원은 회답(문말[※ 1])으로 표시됩니다.
일반적으로 응용 상하문([※ 2]) 단위로 기본 렌더기를 선택하거나(예를 들어 app 상하문에서 사용JSONレンダラー 등) 자원 단위로 렌더기를 변경할 수 있습니다.
예를 들어 oEmbed HTML이 포함된 웹API를 되돌려주는 것을 개발했다면 HTML 템플릿으로 JSON 응답의 일부 값만 되돌려주고 싶은 경우도 있다.
리소스 단위로 렌더기 변경하기
간단한 예로 고려하다.API를 통해 다음 JSON 응답을 반환합니다.
{"html":"<html><h1>this is embed. bar<\/h1><\/html>"}
기본적으로 다음과 같이 모두 JSON입니다.

.html 키의 값을 Twig 템플릿으로 렌더링된 HTML 보기로 변환합니다.
샘플 항목
kumamidori/ExampleChangeRenderer
분류도

이루어지다
HTML 리소스가 포함된 RenderInterfaceTwigRenderer 바인딩
class Embed extends ResourceObject
{
    /**
     * @Inject
     * @Named("html")
     */
    public function setRenderer(RenderInterface $renderer)
    {
        return parent::setRenderer($renderer);
    }

    public function onGet()
    {
        //・・・
    }
}
API 리소스에 포함된 HTML 리소스에 대한 문자열 평가
namespace Kumamidori\ExampleChangeRenderer\Resource\Page\Api;

//・・・
class Example extends ResourceObject
{
    //・・・
    public function onGet()
    {
        $embed = $this->resource->get->uri('page://self/embed')->eager->request();
        $this['html'] = (string) $embed; // < 文字列評価する

        return $this;
    }
}
보충: 렌더링으로 인한 문자열 평가 시간의 차이
  • (string) 평가를 할 경우 렌더링기로 렌더링
  • 평가(string) 없이 TwigRenderer와 JsonRenderer의 평가가 다르다
  • TwigRender의 경우:
    각 요소에 대해 문자열 평가__toString()를 해야 하기 때문에 각각 주입된 렌더링기로 렌더링
  • Json Renderer의 경우 Json Serializable 인터페이스에 설치된 json Serialize 방법은 JSON이라고 불리기 때문에 문자열을 명확하게 평가해야 한다(ref.https://github.com/bearsunday/BEAR.Resource/blob/1.x/src/ResourceObject.php#L207)([※ 3])
  • 끝말
  • 애초에 내가 몰랐기 때문에 베어의 아이슈/gitter로 가르쳐 줬어요.감사합니다.
  • 참조 링크
  • [※1] 리소스 지향 모드 - BEAR 공식 브로셔
  • [※2] 어플리케이션 - BEAR 공식 브로셔
  • [※3] Gitter - BEAR.Sunday

  • 어플리케이션 컨텍스트 - Qita
  • 요청 및 전송 - Qita
  • Issue #104

  • polidog/Polidog.Todo
  • 관련 링크
  • BEAR.Sunday에서 임의의 페이지 자원으로 JSON 형식의 응답을 되돌려줍니다 (by kawanamiyuu)
  • 좋은 웹페이지 즐겨찾기