2011-12-01 65 views
0

我猜測它沒有完成,因爲我無法在任何地方找到任何引用,即使是沒有迴應的人也會問。儘管我希望Symfony稱之爲別的東西。如何在Symfony中創建自定義文件

我怎樣才能得到的Symfony自動呈現views/{controller}/{action}.html.php

回答

0

@ meze的答案比開箱即用的行爲更令人滿意。

然而,我認爲他指給我的SensioFrameworkExtraBundle給了我線索,我需要實現這一點而不必更換我自己的路線。

這是鉤入kernel view event

其目的,具體陳述爲:

事件的目的是允許一些其它返回值被轉換成一個響應。

我假設它可以用來將控制器操作的空返回值轉換爲響應。

0

不,它在Symfony的標準版是不可能的。但是,路由只是其中的一個components。所以如果你真的想要的話,你可以創建你自己的組件並使用它。

0

你有兩個選擇:

1)使用SensioFrameworkExtraBundle - 它允許使用@Template註解。 (它包含在SE中)。

2)寫你自己的方法。我發現它煩人寫@Template和控制器每一次,所以我說的基本控制器這種方法的任何註釋(這只是一個例子,在生產中使用它之前檢查):在控制器

public function view(array $parameters = array(), Response $response = null, $extension = '') 
{ 
    $extension = !empty($extension) ? $extension : $this->templateExtension; 
    $view = ViewTemplateResolver::resolve($this->get('request')->get('_controller'), get_called_class()); 
    return $this->render($view . '.' . $extension, $parameters, $response); 
} 


class ViewTemplateResolver 
{ 

    public static function resolve($controller, $class) 
    { 
     $action = preg_replace('/(.*?:|Action$)/', '', $controller); 
     if (preg_match('~(\w+)\\\\(\w+Bundle).*?(\w+(?=Controller$))~', $class, $name)) { 
      return implode(':', array($name[1] . $name[2], $name[3], $action)); 
     } 
    } 
} 

現在我們可以這樣做:return $this->view();

0

當您使用批註而不是yaml進行路由時,您可以將@Template()添加到您的操作方法中,並且它會根據您的要求呈現默認模板。

要做到這一點,你的路由更改爲註釋:

AcmeDemoBundle: 
    resource: "@PAcmeDemoBundle/Controller/" 
    type: annotation 
    prefix:/

在你的控制器,這增加每個動作:

/** 
* @Route("/index", name="demo_index") 
* @Template() 
*/ 

其實我不知道是否有辦法不使用註釋時獲得此行爲。但是因爲似乎有邏輯,所以可能有一個。

相關問題