如何通过url Symfony 2从另一个文件夹中调用Controller?

时间:2015-08-11 07:02:04

标签: php symfony model-view-controller controller

我有这个文件夹结构(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文件夹加载控制器

3 个答案:

答案 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文档。

Symfony2 Doc

从上面编辑过的问题我认为你想通过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/
            ├─ ...
            └─ ...