首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >菜单生成器不存在Symfony异常KNPMenu生成器

菜单生成器不存在Symfony异常KNPMenu生成器
EN

Stack Overflow用户
提问于 2013-03-17 10:03:59
回答 1查看 1.8K关注 0票数 0

我尝试使用KnpMenu教程创建一个菜单,并在Symfony中与引导程序一起使用。它在本地模式下工作得很好,但是当我在我的服务器上(都是在dev模式下)尝试它时,它不能工作,我有以下错误:

在呈现模板时抛出了一个异常( "robStorm\WelcomeBundle\ menu \ builder“不存在于菜单生成器”robStormWelcomeBundle:Builder“)。在"robStormWelcomeBundle:Homepage:index.html.twig".中500个内部服务器错误- Twig_Error_Runtime 1链接异常: InvalidArgumentException

但是,我在本地或服务器上有完全相同的文件.

以下是我文件的内容:

在app/config/config.yml中:

代码语言:javascript
复制
# Twig Configuration
twig:
    debug:            %kernel.debug%
    strict_variables: %kernel.debug%
twig:
    form:
        resources:
            - "BraincraftedBootstrapBundle:Form:form_div_layout.html.twig"
knp_menu:
   twig:
       template: "BraincraftedBootstrapBundle:Menu:menu.html.twig"

在src/robStorm/WelcomeBundle/Controller/HomepageController中:

代码语言:javascript
复制
public function indexAction()
{
    return $this->render('robStormWelcomeBundle:Homepage:index.html.twig');
}

在src/robStorm/WelcomeBundle/Menu/builder.php中:

代码语言:javascript
复制
<?php
namespace robStorm\WelcomeBundle\Menu;

use Knp\Menu\FactoryInterface;
use Symfony\Component\DependencyInjection\ContainerAware;
use Knp\Menu\Matcher\Matcher;
use Knp\Menu\Matcher\Voter\UriVoter;
use Knp\Menu\MenuFactory;
use Knp\Menu\Renderer\ListRenderer;

class Builder extends ContainerAware
{

    public function mainMenu(FactoryInterface $factory, array $options)
    {
        $menu = $factory->createItem('root');

        $item = $menu->addChild('Accueil', array('route' => 'robStormWelcomeBundle_homepage'));      
        $menu->addChild('Combat', array('route' => 'robStormWelcomeBundle_homepage_combat'));
        $menu->addChild('Boutique', array('uri' => '#'));


        return $menu;
    }

    public function menuDroite(FactoryInterface $factory, array $options)
    {
        $menu = $factory->createItem('root');

        $menu->addChild('Aide', array('uri' => '#'));
        $menu->addChild('d1', array('attributes' => array('divider' => true)));
        $dropdown = $menu->addChild('Mon compte');
        $dropdown->addChild('Mon profil', array('uri' => '#'));
        $dropdown->addChild('Mes messages', array('uri' => '#'));
        $dropdown->addChild('d1', array('attributes' => array('divider' => true)));
        $dropdown->addChild('Se déconnecter', array('uri' => '#'));

        return $menu;
    }


}

在src/robStorm/WelcomeBundle/Ressources/config/routing.yml中:

代码语言:javascript
复制
robStormWelcomeBundle_homepage:
    pattern:  /
    defaults: { _controller: "robStormWelcomeBundle:Homepage:index" }

在src/robStorm/WelcomeBundle/Ressources/views/layout.html.twig中:

代码语言:javascript
复制
<div class="container">
    {{ knp_menu_render('robStormWelcomeBundle:Builder:mainMenu', {'nav_type': 'navbar', 'currentAsLink': true}) }}
    {{ knp_menu_render('robStormWelcomeBundle:Builder:menuDroite', {'nav_type': 'navbar', 'currentAsLink': true, 'pull': 'right'}) }}
</div>
EN

回答 1

Stack Overflow用户

发布于 2013-03-17 12:14:13

问题与文件/类的情况有关。

如果使用robStormWelcomeBundle:Builder:mainMenu,服务器将查找一个src/robStorm/WelcomeBundle/Menu/Builder.php文件(请注意文件名)。但是该文件不存在,您将其命名为builder.php (小写)。

您现在所做的解决方案(将...:Builder:mainMenu改为...:builder:mainMenu)并不那么好。这意味着PHP将寻找一个builder类,而不是实际的Builder类。因为PHP是一种非常懒惰的语言,它将接受Builder类而不是builder,但是这样做并不好。

实际解决方案(如果非常简单):将builder.php重命名为Builder.php

之所以没有在本地环境中发生这种情况,但在服务器上却没有发生,是因为计算机也很懒(服务器不是这样)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15459541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档