簡體   English   中英

Symfony2注釋無法為命名路由生成URL

[英]Symfony2 annotation Unable to generate a URL for the named route

就我搜索類似的問題而言,我沒有找到能解決我問題的方法。

這是app / config / 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'));

這是來自應用程序/控制台路由器的輸出:match / 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') }}

我在kernel.root_dir / Resources / views / layout.html中收到“在呈現模板期間拋出了異常(由於該路由不存在,因此無法為命名的路由“地址”生成URL。”)。第19行的小樹枝”。 為什么?

任何幫助表示贊賞。

只能使用指向功能的路由。 您只有一條工作路線。 它是/ address / {name}

/ address僅引用控制器類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();
    }
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM