2012-04-03 65 views
0

我有一個正在使用佈局的zend mvc應用程序,此佈局使用外部樣式表和腳本。網站中的每個頁面都有自己的控制器,每個頁面的頁面特定內容位於其index.phtml文件中。佈局可以工作,並且所有的腳本/樣式表都適用於每個控制器的index.phtml。Zend MVC頁面結構與佈局鏈接的路徑

例如,主頁是「mvcProject /」,它調用索引控制器的索引操作,索引控制器使用index.phtml文件。此外,關於我們的頁面是「mvcProject/about」,它調用about控制器並顯示views/about/index.phtml。主觀上我覺得這種結構是低效的。這個網站的內容只是html,我看不出爲什麼每個頁面都需要自己的控制器。

因此,我試圖只使用一個控制器來實現相同的目標,即具有相同的體系結構,通過在單個索引控制器中爲每個頁面分配自己的操作。所以現在「關於我們」的頁面是「mvcProject/index/about」,這樣索引控制器就會調用about操作來使用views/index/about.phtml文件。

該方法打破了佈局中所有到外部腳本/樣式表的鏈接。佈局仍然有效,但鏈接的路徑都不起作用。顯然,這是一個與路徑相關的問題,但對於zend我還是比較新的,所以我不確定如何解決這個問題。所以我又回到了每個頁面,重新擁有自己的控制器。

所以我的問題有兩個方面:我是否需要關注自己,避免給每個頁面添加自己的控制器,如果我確實需要縮小這個結構,我需要調整以糾正鏈接的「路徑?感謝您的考慮。

+0

您正在使用Zend框架只提供HTML內容,沒有數據庫,沒有動態?似乎矯枉過正使用這個框架來完成這項任務,更不用說爲每個頁面思考一個控制器是矯枉過正的。給每個頁面分配自己的控制器並不是過分矯枉過正。這是MVC的用途,您將請求發送給控制器進行處理,然後控制器將返回響應。這是整個想法。看看這個關於在Zend_Framework中提供靜態內容的問題(http://stackoverflow.com/questions/8946486/updated-best-practices-for-managing-static-content-in-zend-framework) – Flukey 2012-04-03 22:57:47

+0

同意,這將是單純爲靜態內容矯枉過正。但是,這只是一個更大的項目的第一階段。在一兩週內,我將添加數據庫。感謝您的鏈接。 – dsulli 2012-04-22 07:31:44

回答

1

現在忽略關於框架/控制器數量的討論是過度的。你的腳本/ css失敗的原因確實是一個路徑問題。如果您正在使用佈局助手,那麼您應該使用視圖內的headLink和headScript對象。

這是我在開發時設置腳本和css文件的首選方式。

bootstrap.php中

protected function _initView() 
{ 
    // Initalise the view 
    $view = new Zend_View(); 
    $view->doctype('HTML5'); 

    // Get config options for the UI 
    $ui = $this->getApplication()->getOption('ui'); 

    $view->headTitle($ui['title']); 

    foreach ($ui['stylesheet'] as $stylesheet) { 
     $view->headLink()->appendStylesheet($stylesheet); 
    } 

    foreach ($ui['script'] as $script) { 
     $view->headScript()->appendFile($script); 
    } 

    $viewRenderer = Zend_Controller_Action_HelperBroker::getStaticHelper(
      'ViewRenderer' 
    ); 
    $viewRenderer->setView($view); 

    return $view; 
} 

CONFIGS /的application.ini

ui.title = "My Awesome Web App" 
ui.stylesheet[] = "/extjs/resources/css/ext-all.css" 
ui.stylesheet[] = "/resources/css/hod.css" 
ui.stylesheet[] = "/resources/css/icons.css" 
ui.stylesheet[] = "/resources/bootstrap/css/bootstrap.css" 
ui.script[] = "extjs/ext-debug.js" 
ui.script[] = "app.js" 

佈局/ default.phtml

<?php echo $this->doctype(); ?> 
<html> 
<head> 
    <?php 
    echo $this->headTitle(); 
    echo $this->headMeta(); 
    echo $this->headStyle(); 
    echo $this->headScript(); 
    echo $this->headLink(); 
    ?> 
</head> 

<body> 
    <?php echo $this->layout()->content; ?> 
</body> 
</html> 

這允許您在開發模式下設置所需的所有腳本,並且可以在配置中將生成的縮小腳本全部設置爲無需編寫任何額外代碼。

回到矯枉過正的問題。我認爲,即使你沒有連接數據庫和應用程序中的所有鈴聲和哨聲,從維護的角度來看,使用框架仍然是最好的方法(一旦你加快了框架的速度)如果你將有超過5或6頁。除非你的網站會看到大量的流量和每個字節或毫秒的數量,否則我看不到減少框架增加的小額開銷的可維護性。

同樣的邏輯適用於控制器。我不明白爲什麼你們想要減少他們的數量,當他們幫助清楚分工的功能。除非你改變路由器site.com/index/about看起來醜陋比site.com/about :)

+0

分別處理開發和生產環境的資源。這很光滑。謝謝。你回答了我甚至不知道我有的問題。謝謝你的幫助。 – dsulli 2012-04-04 01:14:14

+0

沒問題,添加了一個編輯,以包含佈局腳本中所需的行,因爲我錯過了該部分以防其他人出現並閱讀它。 – 2012-04-04 07:51:46

0

我不知道你的路徑和URL是如何創建在你的意見,但你使用baseUrl幫手? $ this-> baseUrl([file])