사용자 구성 요소 및 간단한보기에서 볼트 템플릿 엔진을 사용하는 것에 대한 질문이 있습니다.사용자 구성 요소 내에서 "보기 단순"볼트 템플릿 사용
사용자 구성 요소 (Phalcon \ Mvc \ User \ Component 형식으로 확장) 용 클래스를 작성했습니다.
public function renderPath()
{
$view = $this->getDi()->getView();
$simpleView = new \Phalcon\Mvc\View\Simple;
$simpleView->setViewsDir($view->getViewsDir().'components/');
$render = $simpleView->render($this->key.'/path');
return $render;
}
그래서, 나는 그것이 viewsDir의 취득 및 간단한 뷰에 대한 경로로 사용하기 위해 현재보기의 구성 요소를 가져 오기 : 그것은 간단한 뷰를 렌더링하는 방법이있다.
이 초기화는 정상적으로 작동하지만 "* .volt"를 렌더링 할 수 있기를 원한다면 phtml 파일 렌더링 만 제공합니다.
볼트 템플릿 ($simpleView->registerEngines(['.volt' => 'volt']);
) 용 엔진을 등록하면 Phalcon \ Mvc \ View \ Exception "응용 프로그램 서비스를 얻으려면 종속성 인젝터 컨테이너가 필요합니다."가 표시됩니다.
그러나 $simpleView->setDi($this->getDi());
을 실행하여 뷰의 DI를 setDI로 변경하면 예외가 발생하지 않고 출력 ($ render === null)도 표시되지 않습니다. 그러나 캐시 디렉토리에서 볼트 템플릿이 컴파일 된 것을 볼 수 있습니다.
$di->set('catalogComponent', function() {
$component = new \ABLib\Components\CatalogComponent;
$component->setCatalogProvider();
return $component;
}, true);
및보기를 렌더링 : {{ this.catalogComponent.renderPath() }}
그래서, 문제는 내가 잘못 무엇인가? 내 구성 요소에서 볼트 템플릿 엔진을 어떻게 사용할 수 있습니까?
는 업데이트 :
이 문제를 해결하기 위해 관리. 불행히도, 나는 그것이 왜 작동하는지 전혀 모른다. 그래서, 내 응용 프로그램에서 나는 다음과 같은 코드를 사용 : 다음
$simpleView = new \Phalcon\Mvc\View\Simple;
$simpleView->setDI($this->getDI());
$simpleView->registerEngines(array(
'.volt' => function ($view, $di) {
$volt = new VoltEngine($view, $di);
$volt->setOptions(array(
'compiledPath' => BASE_PATH.'/cache/',
'prefix' => 'volt_',
));
return $volt;
}
));
와보기를 렌더링하는 $simpleView->render()
를 호출합니다. 이해할 수없는 것 - 서비스가있는 템플릿 엔진을 추가 할 때 왜 작동하지 않습니다. 그러나 새로운 정의를 추가하면 모든 작업이 시작됩니다.
모두 읽지는 않았지만 마지막으로 생각합니다. '{{catalogComponent.renderPath()}}'('this'가없는) - 표준 볼트/뷰 설정을 사용할 때입니다. – jodator
네, 맞습니다. 그것을 제거하십시오. – vansanblch