将附加对象类添加到symfony2控制器文件的最佳方法是什么?

zip*_*zit 3 registry controller include autoloader symfony

我对Symfony2比较陌生,所以我正在边做边学.我的控制器类变得越来越大.我想用函数()或对象 - >方法()来分解它.不幸的是我无法弄清楚代码的放置位置.(实际上它的功能非常简单......但我可以将它包装在一个对象中...)

- 我无法将它添加到我的DefaultController.php文件的底部.它错误输出,而不是在{}内部或外部引导的漂亮代码.

- 我不能简单地将新的NewObject.php文件添加到控制器目录中.那错误了.错误:FatalErrorException:...找不到NewObject.

- 我已经玩过手动mod到../app/autoload.php但是对于一个简单的类添加到我的./SRC/包中真的没有意义.也许我应该构建一个./src/autoload.php文件(类似于./vender/autoload.php),但该文件的内容对我来说根本没有意义.我根本无法弄清楚AnnotationRegistry Loader是如何工作的.

我错过了什么吗?这看起来太难了...我想要的是一个包裹'include'所以我可以在开发和部署后使用该类.

如何在我的代码中包含NewObject.php(以及随附的$ newObject-> function())?

我被告知我可以添加一项服务,但对于这样一个看似简单的任务而言,这似乎是令人费解的开销(同样,我要做的就是清理我的长控制器php代码...)

提前感谢您的建议.

Tho*_*ley 7

所以你有一个看起来像这样的项目结构,对吗?

project
-- app
-- bin
-- src
   -- SomeName
      -- SomeBundle
          -- Controller
          -- Entity
          -- Resources
          -- ...
-- vendor
-- web
Run Code Online (Sandbox Code Playgroud)

而且你只是希望拥有一些在整个捆绑中使用的"助手"类.那是对的吗?

如果是这样,那么你真的可以把它放在你想要的src/目录中...只需确保类名与文件名匹配,并且文件的路径与你在PHP代码顶部定义的命名空间相匹配.

有时当我这样做时,我将在我的包下创建一个名为"Helper /"的简单目录.其他时候,当应用程序更复杂时,我可能会更明确一些.但这是第一个案例的样子......

首先,/Helper在您的包下添加您的目录,并创建类文件:

project
-- app
-- bin
-- src
   -- SomeName
      -- SomeBundle
          -- Controller
          -- Entity
          -- Helper
             -- SomeHelper.php
          -- Resources
          -- ...
-- vendor
-- web
Run Code Online (Sandbox Code Playgroud)

SomeHelper.php可能的内容可能如下所示:

<?php
namespace SomeName\SomeBundle\Helper;

class SomeHelper
{
    public function doSomething()
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

由于您的命名空间与文件路径匹配,因此它会自动加载,因此您无需担心包含语句.只要包含一个use语句,就可以在bundle中的任何位置实例化该类:

<?php
namespace SomeName\SomeBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use SomeName\SomeBundle\Helper\SomeHelper;

class DefaultController extends Controller
{
    public function indexAction()
    {
        ...
        $helper = new SomeHelper();
        $helper->doSomething();
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

关于服务的使用......是的,这可能是过度的,取决于你使用它的目的.当类需要知道它周围的应用程序时,创建服务是有帮助的.例如,如果您正在创建通过电子邮件发送给用户的服务,则可能希望通过Doctrine服务访问您的数据库,或者它可能希望通过Monolog服务记录电子邮件活动.

但是,如果您的类不需要知道应用程序(称为"服务容器"),例如,如果它只是用于传输数据,那么辅助类可能更合适.