【问题标题】:Symfony2 annotation Unable to generate a URL for the named routeSymfony2 注释无法为命名路由生成 URL
【发布时间】:2014-02-06 00:43:11
【问题描述】:

就我搜索过的类似问题而言,我没有找到一个可以解决我的问题的问题。

这是 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'));

这是应用程序/控制台路由器的输出:匹配/地址:

> 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 中收到“在渲染模板期间引发了异常(“无法为命名路由“地址”生成 URL,因为这样的路由不存在。”) .html.twig 第 19 行”。为什么?

任何帮助表示赞赏。

【问题讨论】:

    标签: php symfony routing annotations


    【解决方案1】:

    只能使用指向函数的路由。你只有一个工作路线。它是 /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();
        }
    }
    

    【讨论】:

      【解决方案2】:

      我认为您应该使用basym_address_default_index 作为路由名称,而不是address

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-11-03
        • 1970-01-01
        • 2018-12-15
        • 2021-06-08
        • 2014-12-06
        • 1970-01-01
        • 1970-01-01
        • 2013-06-25
        相关资源
        最近更新 更多