繁体   English   中英

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

[英]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文件夹中调用某些控制器。 我该怎么做?

UPD。

我使用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#include-external-routing-resources

如果两个控制器都位于同一个名称空间中,则只需

$controller = new ControllerInApiFolder();
$conotroller->someFunction();

如果它们没有,那么您需要通过使用声明包括控制器。

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/
            ├─ ...
            └─ ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM