2014-01-16 33 views
1

據我搜索了類似的問題,我沒有找到解決問題的方法。Symfony2註解無法爲指定路線生成URL

這是在應用程序/配置/ routing.yml中的條目:

basym_address: 
    resource: "@BasymAddressBundle/Controller/" 
    type:  annotation 
    prefix: /

這是相應的控制器:

namespace Basym\AddressBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; 

/** 
* Class DefaultController 
* 
* @package Basym\AddressBundle\Controller 
* 
* @Route("/address") 
*/ 
class DefaultController extends Controller 
{ 
    /** 
    * @Route("/{name}", defaults={"name" = "Christian Lauer"}) 
    * @Method({"GET", "POST"}) 
    * @Template() 
    */ 
    public function indexAction($name = "Christian Lauer") 
    { 
     return array('name'); 
    } 
} 

而這裏是從中拋出異常代碼(從一個使用MenuBuilder):

 $menu->addChild('Home', array('route' => 'address')); 

這是從應用程序/路由器的控制檯輸出:匹配/地址:

> php.exe app\console router:match /address 
Route "basym_address_default_index" matches 

[router] Route "basym_address_default_index" 
Name   basym_address_default_index 
Path   /address/{name} 
Host   ANY 
Scheme  ANY 
Method  GET|POST 
Class  Symfony\Component\Routing\Route 
Defaults  _controller: BasymAddressBundle:Default:index 
      name: Christian Lauer 
Requirements 
Options  compiler_class: Symfony\Component\Routing\RouteCompiler 
Path-Regex #^/address(?:/(?P<name>[^/]++))?$#s 

它調用使用MenuBuilder樹枝部分看起來就像這樣(行:19:

{{ knp_menu_render('BasymSystemBundle:MenuBuilder:mainMenu') }} 

我得到無法生成URL「模板的渲染(在異常被拋出」對於指定的路由「地址」,因爲這樣的路由不存在。「)在kernel.root_dir/Resources/views/layout.html.twig第19行」。爲什麼?

任何幫助表示讚賞。

回答

0

只能使用指向函數的路由。你只有一條工作路線。這是/地址/ {名}

/地址只控制器類DefaultController

下面的代碼將支持路由/地址引用:

namespace Basym\AddressBundle\Controller; 

use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; 
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template; 

/** 
* Class DefaultController 
* 
* @package Basym\AddressBundle\Controller 
* 
* @Route("/address") 
*/ 
class DefaultController extends Controller 
{ 
    /** 
    * @Route("/{name}", defaults={"name" = "Christian Lauer"}) 
    * @Method({"GET", "POST"}) 
    * @Template() 
    */ 
    public function indexAction($name = "Christian Lauer") 
    { 
     return array('name'); 
    } 

    /** 
    * @Route("/") 
    * @Method({"GET", "POST"}) 
    */ 
    public function anotherAction() 
    { 
     return new Response(); 
    } 
} 
0

我認爲你應該使用basym_address_default_index作爲路由名稱,而不是address