如何通过url从另一个文件夹调用控制器


How to call Controller from another folder via url Symfony 2?

我有这样的文件夹结构(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/
            ├─ ...
            └─ ...