2014-07-06 34 views
0

我正在開發一個php mvc框架,並且面臨在佈局中渲染視圖的問題,該問題由控制器提供服務。 例如,登錄框對網站的所有頁面都是通用的。這裏是我的佈局:在佈局MVC中呈現動態視圖PHP

<?= $this->partial('layouts/header') ?> 
<aside class="login-box"> 
    <?= $this->partial('indexController', 'loginboxAction'); 
</aside> 
<section class="main"> 
    <?= $this->content() ?> 
</section> 
<?= $this->partial('layouts/footer') ?> 

有靜態或接近靜態的頁眉/頁腳的模板沒有問題,但用戶塊可以恰克它的狀態,它的行爲可以通過控制器進行管理(如indexController一樣)。

如何使這樣的partial方法,可以做到這樣的魔法?它看起來像我需要強制FrontController呈現該控制器的整個MVC,不是嗎?但這將是非常低效的。或者,也許我認爲是錯誤的,這樣的塊,作爲用戶框,可以只是一個視圖,沒有與控制器鏈接?

我明白,我的問題非常抽象,我沒有提供任何代碼,但它比技術問題更具體的架構問題。

+0

你在那裏與MVC無關。這只是一個愚蠢的[模板](http://codeangel.org/articles/simple-php-template-engine.html)。 –

+0

這個問題並不十分清楚。每個控制器都需要有足夠的數據來說明它在做什麼。它所做的一件事就是爲視圖提供數據。您需要能夠根據不同的控制器參數呈現不同的視圖(或查看零件)。 – Shomz

+0

@Shomz實際上,如果不是模仿Rails,而是嘗試實現MVC,那麼控制器**不會向視圖**提供數據。 –

回答

1

我能想到的不同的方式來做到這一點:

  1. 正如你mentionned,請撥打MVC黑社會該組件。如果你認爲這樣做效率低下,也許你必須重構派發請求的部分(這種技術被稱爲HMVC)。

  2. 以某種方式將某個視圖模型/作曲者附加到該組件,例如Laravel的View Composers。 檢查了這一點:http://laravel.com/docs/responses#view-composers

  3. 呼叫從模板視圖助手。你的視圖組件可以註冊一組視圖助手,你可以從任何模板中調用這些視圖助手。 Zend Framework默認提供了一組有用的視圖幫助器,請查看:http://framework.zend.com/manual/2.3/en/modules/zend.view.helpers.html