2012-12-16 118 views
2

我需要返回json對象,該對象具有呈現操作的屬性'html'。 是否可以用Phalcon vew本地生產?它可以得到Phalcon Mvc 查看渲染輸出的變量?

實施例:

$posts = NewsPost::find(['limit' => 10]); 
$view = new Phalcon\Mvc\View(); 
$view->setVar('posts', $posts); 
$view->setMainView('news/posts'); // not sure if this is correct 

// retrieve some data ... 
$response = [ 
    'html' => $view->render(), 
    'somedata' => 'somevalues', 
    .... 
]; 

P.S.關於爾康PHP框架問題: http://docs.phalconphp.com/en/latest/api/Phalcon_Mvc_View.html

+0

你有沒有看過['Response'](http://docs.phalconphp.com/en/latest/api/Phalcon_Http_Response.html)對象? – Havelock

回答

5

輸出緩衝需要啓動第一:

$view = new Phalcon\Mvc\View(); 

$view->setVar('posts', $posts); 

$view->start(); 
$view->render(); //Pass a controller/action as parameters if required 
$view->finish(); 

// retrieve some data ... 
$response = [ 
    'html' => $view->getContent(), 
    'somedata' => 'somevalues', 
    .... 
]; 
+0

非常感謝您! – avasin

+0

它應該更好地從di容器獲取視圖。 $ view = $ this-> getDI() - > get('view'); – anilyeni

1

試試這個

$posts = NewsPost::find(['limit' => 10]); 
$view = new \Phalcon\Mvc\View(); 
$view->setRenderLevel(\Phalcon\Mvc\View::LEVEL_LAYOUT); 
$view->setVar('posts', $posts); 
$viewData = $view->render('news', 'posts'); 

// retrieve some data ... 
$response = [ 
    'html' => $viewData, 
    'somedata' => 'somevalues', 
    .... 
]; 
+0

我試過這個。但作爲partial()方法,因爲render()只是顯示數據,所以不會將其作爲字符串返回:((((( – avasin

+0

謝謝您的嘗試..也許有另一種方法可以做到這一點嗎? – avasin

0
$view = new Phalcon\Mvc\View(); 

$view->setVar('posts', $posts); 

$view->start(); 
$view->render(); //Pass a controller/action as parameters if required 
$view->finish(); 

// retrieve some data ... 
$response = [ 
    'html' => $view->getContent(), 
    'somedata' => 'somevalues', 
    .... 
]; 

不要忘記使用

$view->setViewsDir(APP_PATH . '/app/views/');

否則,您可能會得到一個空字符串返回。

0

有一個簡單的解決方案,我使用它(在我在模型中使用的應用程序的任何部分): 1.加載從DI 2.使用getRender視圖對象與參數

 // Get the view from DI 
     $theView = $this->getDi()->getShared('view'); 
     // Load the text into variable 
     $emailText = $theView->getRender('emails', $emailTemplate, $emailData, function($theView) { 
      $theView->setRenderLevel(\Phalcon\Mvc\View::LEVEL_ACTION_VIEW); 
     });