我按照creating a sample application上的说明操作。我试图快速掌握如何创建一些(现在)静态页面 - 没有用户身份验证,没有ORM等,只是为了让一些东西运行起来。
我创建了两个包:
$ php app/console generate:bundle --namespace=app1/FooBundle --format=yml
$ php app/console generate:bundle --namespace=app2/FooBarBundle --format=yml
来自文档(以及Symfony 1.x如何工作的知识),我希望能够使用以下方式访问这两个'应用程序':
http://sf2.examples.localhost/app_dev.php/app1/hello/angrycoder
http://sf2.examples.localhost/app_dev.php/app2/hello/angrycoder
然而,在这两种情况下,我只是遇到了404错误。
回到文档后,我读到要使用的正确URL;
http://sf2.examples.localhost/app_dev.php/hello/angrycoder
如果显示带有 angrycoder 的页面,那似乎“有效”。
但是 - 我不知道实际调用了哪个应用程序 - 因为我还没有想出如何显示调试工具栏。
因此我的问题是:
[[编辑]]
This is what my app/config/routing.yml file looks like:
app1CoreBundle:
resource: "@app1CoreBundle/Resources/config/routing.yml"
prefix: /
app2CoreBundle:
resource: "@app2CoreBundle/Resources/config/routing.yml"
prefix: /
# Internal routing configuration to handle ESI
#_internal:
# resource: "@FrameworkBundle/Resources/config/routing/internal.xml"
# prefix: /_internal
可以看出,两者都有前缀'/'。所以当我输入:
http://sf2.examples.localhost/app_dev.php/hello/angrycoder
实际调用了哪个应用程序(为什么?)。
根据我的理解,能够调用特定应用程序的唯一(显而易见的方法)是为不同的应用程序使用不同的前缀 - 或者我错过了什么?
答案 0 :(得分:2)
您必须使用路由系统来满足这种需求
因此,如果您转到app/config/routing
或更详细地转到src/app1/FooBundle/Resources/config/routing.yml
,您可以更改显示的页面
详细
// app/config/routing.yml
AcmeHelloBundle
resource: "@AcmeHelloBundle/Resources/config/routing.yml"
prefix: /
//end
// src/Acme/AcmeHelloBundle/Resources/config/routing.yml
AcmeHelloBundle_homepage:
pattern: /hello/{name}
defaults: { _controller: AcmeHelloBundle:Default:index }
//end
通过这种方式,我告诉symfony找到路由系统和规则,AcmeHelloBundle
到文件AcmeHelloBundle/Resources/config/routing.yml
中
在AcmeHelloBundle/Resources/config/routing.yml
之后,我说每个带有/hello{placeHolder}
网址的路径都会传递到Default
控制器,并会呈现index
。
希望很清楚。
答案 1 :(得分:1)
当您使用Symfony 2时,请忘记您对Symfony 1.x的了解。除了名称和整体MVC方法之外,它们非常不同的框架。
Symfony 2没有像Symfony 1那样的“应用程序”。您可以像对待symfony 1应用程序那样对待自己的Bundles,但不要搞错:没有直接的模拟。捆绑包比应用程序更通用和灵活(这是一件好事)
正如您所发现的那样,访问捆绑包的控制器完全由路由系统控制。