2010-01-06 127 views
5

我是symfony的新手,並且有一些簡單的問題。我想了解模塊系統,但我不明白我是如何創建實際的主頁或其他不是基於數據庫模型的頁面。例如,關於具有靜態信息的頁面或者來自不同模型的大量信息的組合的主頁的簡單。在Symfony中創建靜態頁面1

任何人都可以幫忙嗎?

回答

4

首先,模塊不必侷限於數據庫中的模型。您可以擁有一個不依賴數據庫內容的Foo模塊和一個主要基於3種不同模型的Bar模塊。模塊分離是一種邏輯上將您的網站分解爲可管理部分的方式。例如,電子商務網站可能有一個產品模塊,一個類別模塊和一個購物車模塊等等。然後

你的最後一句話可以分成兩個部分:

1)靜態信息可以在任何網頁上 - 如果它的東西,如「關於我們」和「常見問題解答」等,我個人傾向於使用「默認」 或 「家」 模塊,並創造有可見的各種行動:

./symfony generate:module appname home

class homeActions extends sfActions 
{ 
    public function executeAbout(sfWebRequest $request) 
    { 
    // ... 
    } 

    public function executeFaq(sfWebRequest $request) 
    { 
    // ... 
    } 
} 

與相應的T模板文件(aboutSuccess.php,faqSuccess.php)。

2)頁面可以包含來自許多不同模型的數據 - 只需使用您首選的ORM檢索數據的方法並將其設置爲視圖($this->data = MyModel->findByColumn(...)等)。如果您指的是來自不同模塊的數據,那麼您最好查看可用於不同模塊(導航等)的頁面元素的部分或組件。有關這些的更多詳細信息,請參閱the Symfony docs

+0

謝謝!它的工作原理,但我如何編輯routing.yml文件,以便我可以像訪問host.com/about – Danny 2010-01-08 02:28:41

+0

這樣的頁面很好,很高興它爲你工作。在您的routing.yml中,您可以添加一個匹配'action'部分的路由並始終使用靜態模塊。我在http://pastebin.com/f6b55d7a7 – richsage 2010-01-08 09:19:07

3

您可以創建一個模塊,例如稱爲static,併爲每個靜態頁面創建操作或僅根據請求變量傳遞頁面的一個操作。這個動作所做的唯一事情就是加載一個模板。

恕我直言,如果symfony帶有默認模塊,這將是一件好事。

爲(我的自定義)模塊static的例子操作:

class staticActions extends sfActions 
{ 
    public function executeIndex(sfWebRequest $request) 
    { 
    if(!$request->hasParameter('site')) { 
     return sfView::ERROR;  
    } 
    $this->site = $request->getParameter('site'); 
    } 
} 

有了這個模板:

//indexSuccess.php 
<?php include_partial($site) ?> 

實際的靜態網站都是諧音。

在我routing.yml看起來是這樣的:

# static stuff 
about: 
    url: /about 
    param: {module: static, action: index, site: about} 

這樣,你只有當你添加一個靜態的網站創建一個新的部分和新的路由條目,你不必觸摸PHP代碼。

+0

你可以直接使用$ request-> getParameter() – gpilotino 2010-01-06 17:50:54

+0

是的,我編輯它...謝謝。 – 2010-01-06 18:03:01

4

我習慣以這種方式處理靜態頁面。

首先,我在apps/frontend/config/routing中創建一個新條目。陽明:

page: 
    url: pages/:page 
    param: { module: page, action: index } 

然後我寫了一個 「網頁」 模塊(應用/前端/模塊/頁/動作/的actions.class.php):

<?php 
class pageActions extends sfActions 
{ 
    public function executeIndex() 
    { 
    $this->page = $this->getRequestParameter("page"); 
    $this->forward404Unless($this->_partialExists($this->page)); 
    } 

    protected function _partialExists($name) 
    { 
    $directory = $this->getContext()->getModuleDirectory(); 
    return (is_readable($directory.DIRECTORY_SEPARATOR."templates". 
      DIRECTORY_SEPARATOR."_".$name.".php")); 
    } 
} 

最後一步,把模塊/頁/templates/indexSuccess.php此代碼:

<?php include_partial($page); ?> 

所以你必須從現在要做的是創建一個部分爲每個靜態頁面即。 應用/前端/模塊/頁/模板/ _home.php你可以在 http://yousite/pages/home達到從以上(無需添加的每一頁新的路由條目)

0

除此之外,考慮爲靜態的一個CMS頁面,所以你不需要技術人員來幫助他們或改變他們。當然,這取決於項目。

2

另一種方式爲靜態頁面,而無需編寫任何控制器代碼是建立路由類似以下內容:

myStaticPage: 
    pattern: /pageName 
    defaults: 
     _controller: FrameworkBundle:Template:template 
     template: MyBundle:Home:pageName.html.twig 

然後,只需創建樹枝的模板,它應該工作的罰款。

+0

上舉了一個例子。小心,這個問題是關於symfony 1,而不是Symfony 2。 – j0k 2013-04-15 14:10:13

0

對於真的是靜態和獨立的頁面,你可以簡單地創建[pathToYourProjectRoot]/web目錄中的任何文件。

它可以通過例如[pathToYourProjectRoot]/web/assets/static_html/about.html。 然後直接鏈接到頁面http://your.site.com/assets/static_html/about.html