외부 Controller Fetch 외부 Controller를 Fetch하여 종속 시키는 방법을 안내합니다.

부모 Controller에서 외부 Controller Fetch

zigger는 외부 Controller를 웹페이지에 삽입하기 위해 Fetch 기능을 제공합니다.
Controller /app/test.php
<?php
class Testpage extends \Controller\Make_Controller {

    public function init()
    {
        $this->layout()->head();
        $this->layout()->view(PH_THEME_PATH.'/html/test.tpl.php');
        $this->layout()->foot();
    }

    public function make()
    {
        ...
    }

    public function fetch()
    {
        $fetch = new \Controller\Make_View_Fetch();
        $fetch->set('doc', PH_PATH.'/incfile.php');
        $fetch->run();
    }

}
위 예시 코드의 16~21 line과 같이 Controller에 메소드를 정의 후 Fetch 객체를 생성합니다. 생성된 객체에서 set() 을 통해 외부 문서를 Controller에 Fetch 시켜 View에서 출력할 수 있도록 준비 합니다.

Fetch할 자식 Controller 작성

부모 Controller에 Fetch되어 종속될 Controller는 아래와 같이 작성합니다.
Controller /app/incfile.php
<?php
class Incfile extends \Controller\Make_Controller {

    public function init()
    {
        $this->layout()->head();
        $this->layout()->view(PH_THEME_PATH.'/html/incfile.tpl.php');
        $this->layout()->foot();
    }

    public function make()
    {
        ...
    }

}
위와 같이 부모 Controller Fetch의 set() 에서 설정한 doc 의 파일명과 동일한 이름으로 새로운 Class를 작성합니다.
만약, doc 에서 설정한 파일명과 다른 Class Name으로 Controller를 작성하려는 경우 아래와 같이 부모 Controller에서 className 옵션을 설정합니다.
Controller /app/test.php
<?php
class Testpage extends \Controller\Make_Controller {

    public function init()
    {
        $this->layout()->head();
        $this->layout()->view(PH_THEME_PATH.'/html/test.tpl.php');
        $this->layout()->foot();
    }

    public function make()
    {
        ...
    }

    public function fetch()
    {
        $fetch = new \Controller\Make_View_Fetch();
        $fetch->set('doc', PH_PATH.'/incfile.php');
        $fetch->set('className', 'setClassName');
        $fetch->run();
    }

}
혹은,
Controller /app/test.php
<?php
class Testpage extends \Controller\Make_Controller {

    public function init()
    {
        $this->layout()->head();
        $this->layout()->view(PH_THEME_PATH.'/html/test.tpl.php');
        $this->layout()->foot();
    }

    public function make()
    {
        ...
    }

    public function fetch()
    {
        $fetch = new \Controller\Make_View_Fetch();
        $fetch->set('doc', PH_PATH.'/incfile.php');
        $fetch->set('className', 'Module\Board\setClassName');
        $fetch->run();
    }

}

View에서 Fetch된 Controller 출력

부모 Controller에서 Fetch하여 자신 Controller를 결합한 뒤 아래 예시와 같이 부모 Controller View에서 출력합니다.
View /html/zigger-default/test.tpl.php
<?php $this->fetch(); ?>