我有这样的文件夹结构(symfony 2应用程序):
src
|-- Application
| |-- UserBundle
| | |-- Admin
| | |-- Api
| | |-- SomeController.php
| | |-- Controller
| | |-- DefaultController.php
| | |-- DependencyInjection
| | |-- Entity
| | |-- Resources
| | |-- Tests
我想从Api文件夹中调用一些控制器。我怎么能做到呢?
乌利希期刊指南。我使用symfony路由来提供控制器:
application_homepage:
path: /hello/{name}
defaults: { _controller: ApplicationUserBundle:Default:index }
application_some:
path: /api/{slug}
defaults: { _controller: ApplicationUserBundle:../Api/Some:index }
我想从Api文件夹
如果控制器的命名空间为:Application'UserBundle'Api
,className为SomeController
,动作为indexAction
你可以在路由文件中使用这种语法:
application_some:
path: /api/{slug}
defaults: { _controller: Application'UserBundle'Api'SomeController::indexAction }
这个方法也可以:
application_some:
resource: "@ApplicationUserBundle/Api"
type: annotation
或:
application_some:
resource: "@ApplicationUserBundle/Api/SomeController.php"
type: annotation
看到http://symfony.com/doc/current/book/routing.html including-external-routing-resources
如果两个控制器位于同一个名称空间中,您可以简单地执行
$controller = new ControllerInApiFolder();
$conotroller->someFunction();
如果没有,那么你需要通过use-statement包含控制器。
use Namespace'My'Controller'Sits'In'ControllerInApiFolder;
如果您试图从模板、url或测试用例而不是从另一个控制器访问控制器,则应参考symfony2文档。
Symfony2医生
从上面编辑的问题中,我认为你想通过url调用控制器。你可以在浏览器中输入
path/to/my/web/api/something
或
path/to/my/web/app_dev.php/api/something
其中"path/to/my/web"指的是项目中web文件夹的路径
编辑:我想现在我得到的问题…Symfony2路由总是默认在/Controller文件夹中查找控制器(这很好)。我不太确定您是否应该在此添加另一个文件夹。相反,文档建议在/Controller文件夹中设置多个文件夹。如果你看一下这里显示的文件夹结构:Symfony2 Controller,你会注意到在/Controller文件夹中有一个API文件夹。
<your-project>/
├─ ...
└─ src/
└─ AppBundle/
├─ ...
└─ Controller/
├─ DefaultController.php
├─ ...
├─ Api/
│ ├─ ...
│ └─ ...
└─ Backend/
├─ ...
└─ ...