2014-07-23 7 views
0

8 년 전에 구축 한 다소 큰 웹 응용 프로그램에 대한 책임이 있습니다. 나중에 ZF1을 사용하여 리팩터링 한 후 현재의 프레임 워크로 넘어 가고 있습니다. 구성 요소. 현재 모든 .phtml 파일을 건드리지 않고도 Zend_View를 Phalcon\Mvc\View\Simple으로 바꿀 수 있는지 확인하려고합니다. 내가으로 실행했습니다

문제는 같은 방식으로보기에 변수를 할당 모두 동안 (예를 들어 $this->view->foo = 'bar'), 템플릿 Zend_View 당신이 <?=$this->foo;?> var에 인쇄하는 것입니다하지만 Phalcon 년에는 <?=$foo;?>입니다.

나는 $ this->를 제거하기 위해 수백 개의 .phtml 파일 각각을 검토하고 싶지는 않다고 언급했다. Phalcon의 render()을 무시하거나 $ this를 사용하여 뷰 매개 변수에 액세스 할 수있는 방법이 있습니까?

당신은 그래서 그냥 (예를 들어, 행동) DI로 변수를 넣어 뷰에 등록되어 모든 서비스에 액세스 할 수 DI 컨테이너를 사용할 수 있습니다
+0

계속 연구하십시오. 따라서 사용자 정의 View Engine을 만드는 방법에 대한 해답이 있다고 생각합니다. 해결할 수 있다면 솔루션을 게시 할 것입니다. – Chris442

+0

시행 착오 끝에 어리석은 간단한 해결책이 발견되었습니다. 초보자는 8 시간 동안 자신의 질문에 답변 할 수 없으므로 최대한 빨리 코드를 게시하겠습니다. – Chris442

답변

0

:

public function indexAction() 
{ 
    $this->getDi()->set('hello', function() { return 'world'; }); 
    ... 

을 그리고 $이를 통해 템플릿에 사용 변수 :

<div> 
    <?php echo $this->hello; ?> 
</div> 

ps 이것은 뷰에 변수를 할당하는 좋은 방법은 아니지만 특별한 경우에 도움이됩니다.

1

내가 하루 종일 노련하게 생각한 것. 간단히 PHP 뷰 엔진을 확장하십시오.

class Engine extends \Phalcon\Mvc\View\Engine\Php 
{ 
    /** 
    * Renders a view using the template engine 
    * 
    * @param string $path 
    * @param array $params 
    * @param boolean $mustClean 
    * @return string 
    */ 
    public function render($path, $params = null, $mustClean = null) 
    {   
     /** 
     * extract view params into current object scope 
     * so we can access them with <?=$this->foo;?> 
     * Maintains backward compat with all the .phtml templates written for Zend_View 
     */ 
     foreach($this->_view->getParamsToView() as $key => $val) { 
      $this->$key = $val; 
     } 

     return parent::render($path, $params, $mustClean);   
    }