我有这个文件夹结构(symfony 2应用程序):
src
|-- Application
| |-- UserBundle
| | |-- Admin
| | |-- Api
| | |-- SomeController.php
| | |-- Controller
| | |-- DefaultController.php
| | |-- DependencyInjection
| | |-- Entity
| | |-- Resources
| | |-- Tests
我想从Api文件夹中调用一些控制器。我怎么能这样做?
UPD。
我使用symfony路由来提供控制器:
application_homepage:
path: /hello/{name}
defaults: { _controller: ApplicationUserBundle:Default:index }
application_some:
path: /api/{slug}
defaults: { _controller: ApplicationUserBundle:../Api/Some:index }
我想从Api文件夹加载控制器
答案 0 :(得分:1)
如果控制器的命名空间是:Application\UserBundle\Api
,
className为SomeController
且操作为indexAction
您可以在路由文件中使用此语法:
application_some:
path: /api/{slug}
defaults: { _controller: Application\UserBundle\Api\SomeController::indexAction }
答案 1 :(得分:1)
此解决方案也可以使用:
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
答案 2 :(得分:0)
如果两个控制器都位于同一个命名空间内,您只需执行
即可$controller = new ControllerInApiFolder();
$conotroller->someFunction();
如果他们不这样做,那么你需要通过use-statement包含控制器。
use Namespace\My\Controller\Sits\In\ControllerInApiFolder;
如果您尝试不是从另一个控制器访问控制器,而是从模板,URL或测试用例访问控制器,则应参考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/
├─ ...
└─ ...