2012-02-29 59 views
4

我在我的symfony應用程序中製作麪包屑菜單:我在執行{Action}中創建了一個鏈接列表,然後我在layout.php中使用了一個組件來顯示它,所以我正在尋找將操作數據傳遞給這個零件。我可以使用sfContext作爲註冊表,但也許有更好的方法?PHP Symfony 1.4 - 將數據從動作傳遞到組件的最佳方式?

+0

好像使用閃光燈的變量在文檔中常見的做到這一點。我同意這是駭人聽聞的,它是我經常碰到的1.4中最大的黑眼睛之一,其形式是從一個動作轉向另一個動作。 – yitznewton 2012-02-29 15:11:13

回答

3

通常你會在動作的視圖中的一個插槽如此:

slot('breadcrumb', $links);

,然後在layout.php中:

<?php if(has_slot('breadcrumb')): ?> 
    <?php include_component('modulename', 'breadcrumb', get_slot('breadcrumb')); ?> 
<?php endif; ?> 

本質slot使用了一個特殊的命名空間的背景下(或者可能是它的響應...... sfParameterHolder某處的某個實例,嘿嘿)作爲插槽名稱/值的註冊表 - 所以您所考慮的解決方案已經實現:-)

+0

感謝您的回答,但我的問題是,無論如何,即使鏈接未在動作中定義,也必須包含麪包屑組件,然後它(組件)會生成鏈接。我不想將麪包屑鏈接傳遞給動作的模板,因爲我認爲它比使用註冊表更不優雅。 – 2012-02-29 12:56:25

+0

另一個解決方案是將麪包屑生成(鏈接的確定和組裝)從組件移到單獨的類。然後你可以將這個類注入'context.load_factories'的上下文中,並用當前的'sfWebRequest'初始化它,我認爲這足以解決你的麪包屑問題。如果沒有,你也可以將這個類掛在'controller.change_action'事件中,以便將解析後的動作放入其中。不知道你的麪包屑是如何編譯的,很難說。然後你只需從組件中獲取這個breadcrumb類。 – prodigitalson 2012-02-29 13:03:02

+0

好的,非常感謝! – 2012-02-29 14:06:43

2

在你的行動:

$this->links = array('link1', 'link2', 'linkn'); 

在模板:

<?php include_component('modulename', 'breadcrumb', array('links' => $links); ?> 
相關問題