我正在尝试在Symfony中创建我的第一个包。本教程将引导您完成创建名为“Acme”的捆绑包的过程。自从我下载了与Acme Demo捆绑一起使用的symfony 2.4。我将所有“AcmeBundle”改为“myAcmeBundle”。我创建了控制器,路由和包,就像除了包的名称之外的指令一样。
啧啧说如果我去
http://localhost/app_dev.php/hello/Ryan
它应该调用我的HelloController.php 我的问题是symfony如何知道我想要运行哪个包。我现在在“src”文件夹中有2个包。每当我输入 localhost / app_dev.php / hello / Ryan 时,它会在 AcmeBundle (默认的演示包)中显示HelloController.php的内容。我想在 myAcmeBundle (我新创建的包)中显示HelloController.php的内容。
其他信息: 也许是与AppKernel类有关的东西,但不是很确定
class AppKernel extends Kernel
{
public function registerBundles()
{
$bundles = array(
new Symfony\Bundle\FrameworkBundle\FrameworkBundle(),
new Symfony\Bundle\SecurityBundle\SecurityBundle(),
new Symfony\Bundle\TwigBundle\TwigBundle(),
new Symfony\Bundle\MonologBundle\MonologBundle(),
new Symfony\Bundle\SwiftmailerBundle\SwiftmailerBundle(),
new Symfony\Bundle\AsseticBundle\AsseticBundle(),
new Doctrine\Bundle\DoctrineBundle\DoctrineBundle(),
new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),
new myAcme\HelloBundle\myAcmeHelloBundle(),
);
if (in_array($this->getEnvironment(), array('dev', 'test'))) {
$bundles[] = new Acme\DemoBundle\AcmeDemoBundle();
//$bundles[] = new myAcme\HelloBundle\myAcmeHelloBundle();
$bundles[] = new Symfony\Bundle\WebProfilerBundle\WebProfilerBundle();
$bundles[] = new Sensio\Bundle\DistributionBundle\SensioDistributionBundle();
$bundles[] = new Sensio\Bundle\GeneratorBundle\SensioGeneratorBundle();
}
return $bundles;
}
public function registerContainerConfiguration(LoaderInterface $loader)
{
$loader->load(__DIR__.'/config/config_'.$this->getEnvironment().'.yml');
}
}
应用\设置\ routing.yml中
my_acme_hello:
resource: "@myAcmeHelloBundle/Resources/config/routing.yml"
prefix: /
SRC \ myAcme \ HelloBundle \资源\配置\ routing.yml中
my_acme_hello_homepage:
path: /hello/{name}
defaults: { _controller: myAcmeHelloBundle:Default:index }
答案 0 :(得分:1)
Symfony2路由以与解析相同的顺序提供(匹配):当您使用prefix: /
而未指定任何其他内容(特别是测试问候符号)时,您尝试覆盖基础{{1}我认为没有enaugh信息的路线会在你的新捆绑路线之前被解析。
解决方案:尝试取消注册AcmeBundle
,看看会发生什么。
如果现在框架服务于你的newbundle ruote并且你想让AcmeBundle
保持活着,那么你应该在AcmeDemo之前编写你的包的路由
要取消注册AcmeDemoBundle,请按以下步骤修改AcmeBundle
:
AppKernel
答案 1 :(得分:0)
调用“Hello”控制器而不是“默认”控制器
my_acme_hello_homepage:
path: /hello/{name}
defaults: { _controller: myAcmeHelloBundle:Hello:index }