2012-10-05 29 views
3

我有兩個模塊Admin和Login。Zend Framework 2在視圖中顯示視圖

欲管理員視圖「index.html的」

在管理模塊的indexAction控制器

public function indexAction() 
{  
    $login = new LoginController(); 

    $view = new ViewModel(array(
     'theloginform' => $login->loginAction(), 
    )); 

    return $view; 
} 

我有以下在的LoginAction方法中顯示登錄視圖「login.phtml」在登錄控制器中,我返回'login.phtml'文件的ViewModel。

public function LoginAction() { 
     $view = new ViewModel(); 
     return $view; 
} 

由於變量'theloginform'是一個對象,indexAction會拋出一個錯誤。

Catchable fatal error: Object of class Zend\View\Model\ViewModel could not be converted to string in... 

如果我添加以下內容:

$authentication->loginAction()->captureTo('test') 

的 'index.phtml' 顯示字符串 「內容」。

我讀過,我可能需要呈現ViewModel之前,我將它分配給視圖變量'theloginform',但我似乎無法得到它的工作,我已經嘗試了以下沒有運氣。

public function LoginAction() { 

    $view = new ViewModel(); 

    $renderer = new PhpRenderer(); 
    $resolver = new Resolver\AggregateResolver(); 
    $map = new Resolver\TemplateMapResolver(array(
      'login'  => __DIR__ . '/../view/login.phtml' 

    )); 
    $resolver->attach($map); 
    $view->setTemplate("login"); 
    return $renderer->render($view); 
} 

如果出現以下錯誤:

Zend\View\Renderer\PhpRenderer::render: Unable to render template "login"; resolver could not resolve to a file 

我甚至曾嘗試添加DI到autoload_classmap.php文件,但仍然得到了同樣的錯誤,我有雙重檢查的login.phtml文件在正確的路徑:

「/Login/view/login/login/login.phtml」我甚至它複製到「/Login/src/Login/view/login.phtml」

很困惑已經閱讀然後重新閱讀Zend d ocumentation,我只是想一個視圖傳遞到另一個視圖...

+0

爲什麼你想調用另一個視圖?你想實現什麼? –

+0

在管理模塊中,我有'index.phtml',我想添加登錄模塊'login.phtml'。登錄模塊'login.phtml'視圖還將在其他模塊(如客戶帳戶模塊)中添加其他視圖。 –

+0

我懶得在午餐休息之前回答問題,但請查看Rob Allens playground> https://github.com/akrabat/ZF2TestApp/blob/master/module/Application/src/Application/Controller/ViewController.php它會幫助你很多。您可能也有興趣在下面的問題> http://stackoverflow.com/questions/12451399/how-to-render-zf2-view-within-json-response/12651250#12651250 – Sam

回答

1

在ZF 1.x中,我可能會建議您構建一個引用了視圖佔位符或控制器插件的操作幫助器,該插件可以爲表單調用loginAction邏輯。

在ZF2它看起來像動作助手已經被替換controller plugins,似乎通過event manager被觸發,可能需要知道一個或多個"managers"的。但placeholder view helper仍然存在,甚至似乎有點熟悉。

我建議你看看爲你的登錄表單顯示構建/調整一個控制器插件,然後它可以附加到一個佔位符視圖助手。如果幸運的話,您可以使用視圖幫助程序獲得所需的功能。

我希望我可以幫到更多,但我仍然自己通過這個爛攤子。

祝你好運。

+0

感謝我目前正在構建控制器插件的指針,嘗試了部分幫助器,但它不能與表單對象一起工作。目前我自己與zend框架作鬥爭,特別是如何獲得當前請求的httpRequest對象,可能會打開另一張票:) –

+0

剛剛閱讀有關httpRequest的serviceManager ....完全誤解框架什麼是野獸Zend框架是! –

+4

ZF2可怕的學習,ZF 1不太糟糕。 – RockyFord

4

如果你需要分享一些觀點的內容,你可以使用諧音爲:

$this->partial('partial/login.pthml', array()); //add this to your index view 

你可以看到他們here

您可能還會發現一些有用的信息:How does Zend Framework 2 render partials inside a module?

+0

感謝你,你會如何使用'Admin/view/admin/admin/index.phtml'中的'Login/view/login/login/login.phtml'文件作爲部分視圖?你是否需要將login.phtml文件註冊爲某個地方的部分幫助器? –

+0

您正在設計您的應用程序錯誤,視圖文件意味着被特定的控制器調用:在大多數情況下采取行動。如果您看到您想要重複使用網站的某些部分,請爲此創建部分內容。就像在這種情況下,它可能是登錄表單。然後可以提交給某些控制器操作,然後在控制器上決定如何處理結果,重定向somwhere或顯示一些結果。 –

0

在你管理視圖,你必須使用渲染視圖助手和回聲腳本渲染,所以你可以做

4

this ZF2文件建立頁面

寫這篇echo $this->render($this->theloginform);在登錄操作:

public function loginAction() 
    { 
     return new ViewModel(); 
    } 

而在的indexAction:

$view = new ViewModel(
        array(
        //here any thig you want to assign to index view 
       ) 
       ); 
    $loginView = new ViewModel(
        array(
         //here any thig you want to assign to login view 
        ) 
       ); 


    $loginView->setTemplate('moduleName/controllerName/login'); 

    $view->addChild($loginView, 'login'); 
    return $view 

在index.phtml中,您只需回顯登錄<? echo $this->login ?>您想要顯示loginView的位置。

+0

如果我在控制器中有這樣的事情會怎麼樣:「$ viewModel-> addChild($ formViewModel,$ studEvalId);」 ?如何在不知道用於控制器中的addChild()的captureTo的情況下,在.phtml文件中回顯子viewModel? – vlr

相關問題