2009-12-14 87 views
0

我使用Symfony 1.2.9(與Propel ORM)創建網站。我已經開始使用管理生成器來實現管理功能。我遇到各種各樣的問題,讓管理員經理顯示一個具有1:N關係(博客帖子)和一個N:M關係(博客滾動)的對象(博客)。顯示1:N和M:N與Symfony的關係1.2.9管理生成器

這被證明比我想象的要困難得多(而且我敢說它比需要)。我已經在這個問題上花了兩天時間,並沒有取得很大的進展。我正在嘗試爲博客生成管理功能。

我發佈了我的架構的刪節版here。希望這將有助於澄清我遇到的問題(也許我沒有足夠清楚地解釋問題 - 但希望架構能夠澄清我面臨的問題以及我正在嘗試做的事情)。

博客有0到1個博客文章,0到N個博客文章附加到它。每篇博文都附有0到M條評論。目前,我可以查看博客列表。但我想添加2間相互作用(或鏈接),它可以讓我:

  1. 鑑於博客鏈接(這是附着在博客博客列表)
  2. 查看連接到博客的相關博客文章列表。

當顯示博客帖子列表時,我想鏈接顯示一個鏈接(與以前相同的功能),使我可以顯示所選博客貼的評論列表。

我相信我不是第一個(或唯一)曾嘗試過這樣做的人。我是否以錯誤的方式去解決問題,是否有更好的(即對用戶更直觀)的方式來顯示和執行具有這種關係的對象的CRUD?任何人都可以幫忙嗎?

回答

2

爲什麼你不這樣做,因爲你自己在你的其他問題提出。

(這又是爲教義,但對於Propel它應該是相似的)。

generator.yml創建一個對象動作:

list: 
    object_actions: 
     bloglist: {label: Bloglist} 

然後在你的actions.class.php必須添加一個功能:

public function executeListBloglist(sfWebRequest $request) { 
    $blog = $this->getRoute()->getObject(); 

    // retrieve the blogposts via a PEER method (I don't have any clue about Propel ;)) 
    $this->blogposts = however.you.get.the.blogposts(); 
} 

然後您展示的職位創建模板bloglistSuccess.php

或者,如果您有這樣的模塊,您可以重定向或轉發到博客的管理模塊。您可能會重寫列表操作以接受博客的ID參數,並將查詢擴展爲通過此博客ID過濾帖子。
沒有什麼錯在做一個重定向或轉發,這是不是黑客攻擊;註釋後)


編輯:

我也建議你轉發請求。
不,您不必更改路由,只需按照您的建議追加參數即可。

爲了壓倒一切,我重新考慮過,如果您重寫buildQuery方法(再次),會更好。 (我不記得如何用Propel調用這個方法,我希望你明白我的意思)。

因此,這將是這樣的:

class blogpostAdminActions extends autoBlogpostAdminActions 
{ 

    //... 

    protected function buildQuery() 
    { 
    $query = parent::buildQuery(); 

    $request = $this->getRequest(); // <- I am not sure about this method call but there is one that gives you the webRequest. 

    if ($request->hasParamter('blog_id')) 
    { 
     $query->andWhere('blog_id = ?', $request->getParameter('blog_id')); 
    } 

    return $query; 
    } 
} 

當然,你必須將其更改爲推進的標準,但我相信你可以做到這一點;)
希望這有助於你。

+0

嗨菲利克斯,感謝您對轉發/重定向的保證,而不是黑客攻擊。我來自一個桌面C++環境,所以有時我的思維太僵化了) 無論如何,回到你的proferred soln,我更願意轉發到由admin gen生成的模塊,bcos它有一個過濾器部分等。 我認爲缺少的鏈接就是你的建議。我已經像在之前的文章中所建議的那樣覆蓋了buildCriteria()方法,並且在那裏設置了blog_id(從會話中檢索 - 很糟糕!)。我可以重寫列表操作,但請您澄清一下您的意思: – 2009-12-15 00:12:31

+0

i)。覆蓋列表操作以接受博客的ID參數 - 我是否必須更改列表的路由以創建blog_id參數,或者我可以簡單地追加'?blog_id = $ vlog_id到url,然後在重寫列表操作中使用$ request-> getParameter('blog_id')? ii)。擴展查詢以通過此博客ID過濾帖子。 如果您能向我發送一段代碼(通過pastebin)來表明您(i)和(ii)的含義,我將不勝感激。我應該能夠在我認爲之後實現這些功能。再次感謝您的幫助。 – 2009-12-15 00:16:18

+0

我嘗試轉發並出現錯誤: return $ this-> forward('blgpostadmin',「index?blog_id = $ blog_id&user_id = $ user_id」); 「blgpostadmin/indexblog_id3user_id3」操作不存在。 ??! – 2009-12-15 00:53:54